RabbitMQ 是一个由 erlang 语言开发的实现 AMQP(Advanved Message Queue) 协议的开源MQ。
一、AMPQ 协议
AMQP 是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并且不受客户端/中间件不同产品,不同开发语言等条件的限制。
这种降低耦合的机制是基于与上层产品,语言无关的协议。AMQP 协议是一种二进制协议,提供客户端应用与消息中间件之间异步、安全、高效地交互。
模型图如下:
二、 AMQP 组件
* Server:又叫做 Broker,接收客户端的连接,实现 AMQP 服务
* Connection:连接,应用程序与 Broker 的网络连接
* Channel:网络信道,进行消息读写的通道,客户端可以建立多个Channel,每个 Channel 代表一个会话任务
* Message:消息,服务器和应用程序之间传送的数据,由 Properties 和 Body 组成。Properties 可以对消息进行装饰,比如消息的优先级、延迟等高级特性;Body 则是消息体内容。
* Virtual Host:虚拟主机,用于进行逻辑隔离,属于最上层的消息路由。一个 Virtual Host 可以拥有多个 Exchange 和 Queue,同一个 Virtual Host 中不能存在相同名称的Exchange 或 Queue。
* Exchange:交换机,接收消息并根据路由键转发消息到绑定的队列。
* Queue:又叫做 MessageQueue,消息队列,保存消息并将它们转发给消费者。
* Routing key:路由规则,虚拟机用它来确定如何路由一个特定的消息。
* Binding: Exchange 和 Queue 之间的虚拟连接,binding 中科院包含 routing key。
* producer:消息生产者,就是投递消息的程序。
* consumer:消息消费者,就是接受消息的程序。
三、 RabbitMQ 消息流转流程
1)发布者(Publisher)发布消息(Message)到交换机(Exchange)。
2)交换机根据路由规则将收到的消息分发给与该交换机绑定的队列(Queue)。
3)最后 MQServer 会将消息投递给订阅了此队列的消费者或者消费者按照需求自行获取。