RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。它的并发最高可以支持一万并发,且它出身于金融行业。
Producer:生产者
Consumer:消费者
Broker:消息中间件的服务节点 。
Virtual Host:等同于 namespace
Channel:频道或信道,是建立在 Connection 连接之上的一种轻量级的连接。
RoutingKey:路由键。生产者将消息发给交换器的时候,一般会指定一个 RoutingKey,用来指定这个消息的路由规则。
Exchange:交换器,生产者将消息发送到 Exchange (交换器,通常也可以用大写的“X”来表示),由交换器将消息路由到一个或者多个队列中。如果路由不到,或返回给生产者,或直接丢弃。
Queue:队列,是 RabbitMQ 的内部对象,用于存储消息。
Binding:绑定,RabbitMQ 中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定键( BindingKey ) ,这样 RabbitMQ 就知道如何正确地将消息路由到队列了。
1、生产者连接到 RabbitMQ Broker,建立一个连接( Connection) ,开启一个信道 (Channel)
2、生产者声明一个交换器 ,并设置相关属性,比如 交换机类型、是否持久化等
3、生产者声明 一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等4、生产者通过路由键将交换器和队列绑定起来
5、生产者发送消息至 RabbitMQ Broker,其中包含路由键、交换器等信息
6、相应的交换器根据接收到的路由键查找相匹配的队列7、如果找到,则将从生产者发送过来的消息存入相应的队列中
8、如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者
9、关闭信道、关闭连接
1、生产者连接到 RabbitMQ Broker,建立一个连接( Connection) ,开启一个信道 (Channel)
2、消费者向 RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数,以及做一些准备工作
3、等待 RabbitMQ Broker 回应并投递相应队列中的消息, 消费者接收消息4、消费者确认 (ack) 接收到的消息
5、RabbitMQ 从队列中删除相应己经被确认的消息
6、关闭信道、关闭连接
开源,可靠性,高可用,多语言客户端,灵活的路由,插件机制,管理界面,消息集群,多种协议,跟踪机制,文档丰富
下面对上述重要的特点进行展开讲述
1.ack 机制(推荐)
2.channel 事务(不推荐)
3.重发机制
4.支持持久化
5.死信队列(1.消息过期,2.消息被拒绝,3.队列满了),说白了就是没有被消费的消息移到死信队列
rabbitmq 支持集群部署,分为普通模式和镜像模式,普通模式不好用,最好用镜像模式
灵活体现在它的交换器 Exchange
RabbitMQ 常用的交换器类型有 fanout、direct、topic、headers 这四种
插件丰富多样,且安装简单,比如 rabbitmq 的 management 管理插件
可以通过安装插件的方式,就可以拥有管理 Web 页面。
不支持消息的顺序消费,除非所有消息都放到一个队列,只有一个消费者去消费才可以实现顺序消费 s