消息队列

Rabbitmq基本原理

Deadly 提交于 2020-02-24 18:13:32
MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表,producer往消息队列中不断写入消息,而另一端consumer则可以读取或者订阅队列中的消息。RabbitMQ是MQ产品的典型代表,是一款基于AMQP协议可复用的企业消息系统。业务上,可以实现服务提供者和消费者之间的数据解耦,提供高可用性的消息传输机制,在实际生产中应用相当广泛。本文意在介绍Rabbitmq的基本原理,包括rabbitmq基本框架,概念,通信过程等。 系统架构 Rabbitmq系统最核心的组件是Exchange和Queue,下图是系统简单的示意图。Exchange和Queue是在rabbitmq server(又叫做broker)端,producer和consumer在应用端。 producer&Consumer producer指的是消息生产者,consumer消息的消费者。 Queue 消息队列,提供了FIFO的处理机制,具有缓存消息的能力。rabbitmq中,队列消息可以设置为持久化,临时或者自动删除。 设置为持久化的队列,queue中的消息会在server本地硬盘存储一份,防止系统crash,数据丢失 设置为临时队列,queue中的数据在系统重启之后就会丢失 设置为自动删除的队列,当不存在用户连接到server,队列中的数据会被自动删除

Kafka的配置文件详细描述

喜你入骨 提交于 2020-02-24 12:48:54
文章目录 1.producer.properties:生产端的配置文件 2.consumer.properties:消费端的配置文件 3.server.properties:服务端的配置文件 4.硬件的选择 1.磁盘吞吐量 2.磁盘容量 3.内存 4.网络 5.CPU 在kafka/config/目录下面有3个配置文件: producer.properties consumer.properties server.properties 1.producer.properties:生产端的配置文件 #指定kafka节点列表,用于获取metadata,不必全部指定 #需要kafka的服务器地址,来获取每一个topic的分片数等元数据信息。 metadata . broker . list=kafka01:9092 , kafka02:9092 , kafka03:9092 #生产者生产的消息被发送到哪个block,需要一个分组策略。 #指定分区处理类。默认kafka.producer.DefaultPartitioner,表通过key哈希到对应分区 #partitioner.class=kafka.producer.DefaultPartitioner #生产者生产的消息可以通过一定的压缩策略(或者说压缩算法)来压缩。消息被压缩后发送到broker集群,

消息队列面试大全

北慕城南 提交于 2020-02-24 05:05:22
文章目录 消息队列引入 你在项目种使用过消息队列么?公司使用什么消息架构 消息队列和异步调用的区别 那些业务场景使用了消息队列 消息队列的优点 消息中间件的缺点 Kafka概述 简述kafka架构下的重要关键字 为什么要选择kafka kafka和rabbitMQ区别 分布式构建三把斧:缓存+异步+数据分组 支付状态:未支付,支付成功,支付失败,待退款,已退款 快递状态:代发货,待收货,已收货,退货-商家待收货,退货-商家已收货 订单状态:订单打开,订单取消,订单关闭,订单完成 消息队列引入 Http请求适用于 耗费数百毫秒或更少时间 执行任务,当业务耗时达到一两秒种或更长时,需要。 例如 下单送积分,下单是最主要的,送积分可以异步去做 订单支付成功短信通知,返回支付订单进入下一环节更重要,短信通知可以异步执行 订单系统的日志收集功能 你在项目种使用过消息队列么?公司使用什么消息架构 ActiveMq: 分发效率最高,是其他队列的几十倍,缺点是不能做数据持久化 RabbitMQ:使用Erlang语言开发的开源消息队列,基于AMQP协议实现,支持消息的可靠传输,支持事务,不支持批量操作。 Kafka:最初由领英开发,以可水平扩展和高吞吐率被广泛使用,同等硬件Kafka性能超过传统的消息中间件,我们公司使用的消息队列中间件就是Kafka搭建的。 消息队列和异步调用的区别

消息队列MQ(一)

℡╲_俬逩灬. 提交于 2020-02-24 00:35:29
消息队列 为什么要用消息队列,都有什么优缺点? 要问的是消息队列都有哪些场景,然后项目里具体实现的什么场景,你在这个场景里用的什么消息队列? 期望的回答是, 你们公司有个什么业务,这个业务场景有什么技术挑战,如果不用MQ可能会很麻烦,但是你现在用了MQ带给你什么好处? 场景比较多,但是比较核心的是3个: 解耦、异步、削峰 解耦 ​ 需要去考虑你负责的系统中是否有类似的场景,一个系统调用了多个系统和模块,互相之间的调用很复杂,维护起来很麻烦。但是这个调用并不需要直接同步调用接口,如果用MQ给它异步化解耦,也是可以的,你就需要 考虑在你的项目中,是不是可以运用这个MQ去进行解耦。在简历中体现出来 异步化 异步化可以大幅度提升高延迟接口的性能 削锋: 未使用MQ的时候: 使用MQ以后: 系统架构中引入MQ后可能存在的缺陷: 系统可用性降低:系统引入的外部依赖越多,越容易挂掉。 系统的复杂性更高:需要考虑的问题越多 一致性问题 问题2:kafka,activeMq,rabbitMq,rocketMq 都有什么优缺点? 特性 ACTIVEMQ RABBITMQ ROCKETMQ KAFKA 单击吞吐量 万级吞吐量,相比RocketMq和Kafka要第一个数量级 万级,吞吐量相比RocketMq和 Kafka要低一个数量级 10万级,RocketMq也是可以支撑高吞吐的一种MQ 10万级别

RabbitMQ实现延时队列

流过昼夜 提交于 2020-02-23 22:50:42
RabbitMQ如何实现延时队列? RabbitMQ实现延时队列一般有两种形式: **第一种方式:**利用两个特性: Time To live(TTL),Dead letter Exchanges(DLX)[A消息队列过期–>发送给B队列] **第二种方式:**利用RabbitMQ的插件x-delay-message RabbitMQ可以针对队列设置x-expires(则队列中所有的消息都有相同的过期时间或者针对Message设置x-message-tt(对消息进行单独设置,每条消息TTL可以不同),来控制消息的生存时间,如果超时(两者同时设置以最先到期的为准),则消息变为dead letter(死信)) Dead Letter Exchanges(DLX) RabbitMQ的Queue可以配置x-dead-letter-exchange和x-dead-letter-routing-key(可选)两个参数,如果队列中出现dead letter,则按照者两个参数重新路由转换到指定的队列. x-dead-letter-exchange:出现dead letter重新发送消息到指定exchange x-dead-letter-routing-key: 出现dead letter之后将dead letter重新按照指定的routing-key发送 实际应用: /** *延时队列--

RabbitMQ消息交换模式简介

一世执手 提交于 2020-02-23 19:11:29
RabbitMQ是 AMQP 的一个典型实现,它消息发布者的消息发布到Exchange上,同时需要制定routingkey,可以通过指定交换机的不同模式实现不同的行为。 RabbitMQ提供了四种Exchange:fanout,direct,topic和header。其中header模式在实际使用中较少,本文只对前三种模式进行比较。 Direct模式(点对点通讯): Direct Exchange是RabbitMQ默认的交换机模式,也是最简单的模式,根据key全文匹配去寻找队列。规则如下: 发布到exchange的消息通过routingkey的完全匹配发布到queue上。 如果routingkey不存在,则丢弃 点对点方式是最为传统和常见的通讯方式,它支持一对一、一对多、多对多、多对一等多种配置方式,支持树状、网状等多种拓扑结构。 fanout模式(多点广播): fanout模式比较简单,广播式的,无视routingkey直接发送给所有的queue Topic模式(发布/订阅): 任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue上 这种模式较为复杂,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一个"标题"(RouteKey),Exchange会将消息转发到所有关注主题能与RouteKey模糊匹配的队列。

消息队列

本秂侑毒 提交于 2020-02-23 02:48:57
接收者1:按顺序接收 /* Here's the receiver program. */ # include <stdlib.h> # include <stdio.h> # include <string.h> # include <errno.h> # include <unistd.h> # include <sys/msg.h> struct my_msg_st { long int my_msg_type ; char some_text [ BUFSIZ ] ; } ; int main ( ) { int running = 1 ; int msgid ; struct my_msg_st some_data ; long int msg_to_receive = 0 ; int receivedata = 0 ; /* First, we set up the message queue. */ printf ( "Enter some text: %d \n" , BUFSIZ ) ; msgid = msgget ( ( key_t ) 1234 , 0666 | IPC_CREAT ) ; if ( msgid == - 1 ) { fprintf ( stderr , "msgget failed with error: %d\n" , errno ) ;

rabbitmq安装-1

家住魔仙堡 提交于 2020-02-22 16:39:12
原文地址和下载地址 原方地址: https://www.cnblogs.com/jiagoushi/p/9961388.html rabbitmq下载地址: https://github.com/rabbitmq/rabbitmq-server/releases/ erlang 下载地址: http://erlang.org/download/ rabbitmq一些概念 vhost虚拟主机:一个broker里可以开设多个vhost,用作不同用户的权限分离。一个命名空间 概念 Item Comment Exchange 消息交换机,它指定消息按什么规则,路由到哪个队列 Queue 消息队列,每个消息都会被投入到一个或多个队列 Binding 绑定,它的作用就是把exchange和queue按照路由规则绑定起来 Routing Key 路由关键字,exchange根据这个关键字进行消息投递 Vhost 虚拟主机,可以开设多个vhost,用作不同用户的权限分离 Producer 消息生产者,就是投递消息的程序 Consumer 消息消费者,就是接受消息的程序 Channel 消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务 投递过程 消息队列的使用过程大概如下: 1.客户端连接到消息队列服务器,打开一个channel 2

为什么需要消息队列?使用消息队列有什么好处?

半城伤御伤魂 提交于 2020-02-21 11:46:15
一、消息队列的特性 业务无关,一个具有普适性质的消息队列组件不需要考虑上层的业务模型,只做好消息的分发就可以了,上层业务的不同模块反而需要依赖消息队列所定义的规范进行通信。 FIFO,先投递先到达的保证是一个消息队列和一个buffer的本质区别。 容灾,对于普适的消息队列组件来说,节点的动态增删和消息的持久化,都是支持其容灾能力的重要基本特性。当然,这个特性对于游戏服务器中大部分应用中的消息队列来说不是必须的,这个也是跟应用情景有关的,很多时候没有这种持久化的需求。 性能,这个不必多说了,消息队列的吞吐量上去了,整个系统的内部通信效率也会有提高。 二、为什么需要消息队列? 当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。“ 消息 ”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息被发送到队列中,“ 消息队列 ”是在消息的传输过程中保存消息的容器 。 举几个例子 1)业务系统触发短信发送申请,但短信发送模块速度跟不上,需要将来不及处理的消息暂存一下,缓冲压力。就可以把短信发送申请丢到消息队列,直接返回用户成功,短信发送模块再可以慢慢去消息队列中取消息进行处理。 2)调远程系统下订单成本较高,且因为网络等因素,不稳定,攒一批一起发送。 3)任务处理类的系统

1 入门篇!大白话带你认识 Kafka

守給你的承諾、 提交于 2020-02-21 05:51:48
前言 Kafka 是我在疫情期间在游戏之余学的。虽然之前用过 ActiveMQ 和 RabbitMQ,但是在 Kafka 这门技术面前我也算是一个初学者。文章中若有说法有点完善或者不准确的地方敬请指出。 今天我们来聊聊 Kafka ,主要是带你重新认识一下 Kafka,聊一下 Kafka 中比较重要的概念和问题。在后面的文章中我会介绍: Kafka 的一些高级特性比如工作流程。 使用 Docker 安装 Kafka 并简单使用其发送和消费消息。 Spring Boot 程序如何使用 Kafka 作为消息队列。 我们现在经常提到 Kafka 的时候就已经默认它是一个非常优秀的消息队列了,我们也会经常拿它给 RocketMQ、RabbitMQ 对比。我觉得 Kafka 相比其他消息队列主要的优势如下: 极致的性能 :基于 Scala 和 Java 语言开发,设计中大量使用了批量处理和异步的思想,最高可以每秒处理千万级别的消息。 生态系统兼容性无可匹敌 :Kafka 与周边生态系统的兼容性是最好的没有之一,尤其在大数据和流计算领域。 实际上在早期的时候 Kafka 并不是一个合格的消息队列,早期的 Kafka 在消息队列领域就像是一个衣衫褴褛的孩子一样,功能不完备并且有一些小问题比如丢失消息、不保证消息可靠性等等。当然,这也和 LinkedIn 最早开发 Kafka