介绍
RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 RabbitMQ
主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。 AMQP,即 Advanced Message Queuing
Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP
的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ 是一个开源的 AMQP
实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持
AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
相关概念
通常我们谈到队列服务,会有三个概念:发消息者、队列、收消息者,RabbitMQ 在这个基本概念之上,多做了一层抽象,在发消息者和队列之间,加入了交换器 (Exchange)。
这样发消息者和队列就没有直接联系,转而变成发消息者把消息给交换器,交换器根据调度策略再把消息给队列。
工作原理
-
1.首先有个生产者产生一条消息。
-
2.需要把消息发到mq上面去,就需要建立tcp连接,然后建立channel。
-
3.然后通过channel将消息发布到mq中的一个交换机上面去(Exchange)。
-
4.通过交换机(Exchange)将消息发送到相应的对列(queue)上面去。
-
5.接下来就是消费者了,通过建立tcp连接,通过channel通道拿到相应对列上的消息。
消息发送与接收流程
消息流转模型
生产者发送消息
1、生产者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)。
2、生产者声明一个交换器,并设置相关属性,比如交换机类型、是否持久化等。
3、生产者声明一个队列并设置相关属性,比如是否排他、是否持久化、是否自动删除等。
4、生产者通过路由键将交换器和队列绑定起来。
5、生产者发送消息至 RabbitMQ Broker,其中包含路由键、交换器等信息。
6、相应的交换器根据接收到的路由键查找相匹配的队列。
7、如果找到,则将从生产者发送过来的消息存入相应的队列中。
8、如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者。
9、关闭信道。
10、关闭连接。
消费者消费消息
(1)消费者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)。
(2)消费者向 RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数,
以及做一些准备工作。
(3)等待 RabbitMQ Broker 回应并投递相应队列中的消息,消费者接收消息。
(4)消费者确认(ack)接收到的消息。
(5)RabbitMQ 从队列中删除相应已经被确认的消息。
(6)关闭信道。
(7)关闭连接。