RabbitMQ架构模型及概念
RabbitMQ架构模型
当生产者生产一条消息的时候,消息将发布到Exchange(交换机)。交换机根据和队列的绑定规则将相应的消息路由分发到对应的队列。然后Broker将消息投递给订阅了该队列的消费者或者消费者从队列中去拉取消息
RabbitMQ核心概念
- Server - 又称Broker,用于接收客户端连接,实现AMQP实体服务
- Connection - 连接,应用程序与Broekr的网络连接
- Channel - 网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道,客户端可建立多个Channel,每个Channel代表一个会话任务
- Message - 消息,服务器和应用程序之间传输的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则是消息体
- Virtual Host - 虚拟主机,用于进行逻辑隔离,最上层的消息路由,一个Virtual host里面可以有若干个Exchange和Queue,同一个Virtual Host里面不能有相同的名称的Exchange或者Queue
- Exchange - 交换机,接收消息,根据路由键转发消息到绑定的队列
- Binding - Exchange和Queue之间的虚拟连接,binding可以包含routing key
- Routing key - 一个路由规则,虚拟机可用它来确定如何路由一个特定消息
- Queue - 消息队列,保存消息并将它们转发给特定消费者
RabbitMQ Exchagne类型
Direct exchange
该交换机会把消息路由到那些BindingKey和RoutingKey完全匹配的队列中。
Fanout exchange
该交换机会将消息路由到所有与它绑定的队列上。
Topic exchange
该交换机将消息路由到BindingKey和RoutingKey相匹配的队列中。BindingKey和RoutingKey是由".“分隔的字符串。BindingKey中可以存在两种特殊匹配字符“*”和“#”,其中” * “表示匹配一个单词,”#"表示匹配0个或者多个单词
Headers exchange
该交换机根据发送的消息内容中的headers属性进行匹配。在绑定队列和交换器时指定一组键值对,当发送的消息到交换器时RabbitMQ会获取到该消息的headers,对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对,如果匹配,消息就会路由到该队列
RabbitMQ Exchagne 属性
- exchange - 交换机名称
- type - 交换机类型
- durable - 持久化
- autoDelete - 当最后一个绑定到Exchange上的队列删除后,自动删除Exchange
- internal - 当前Exchange是否用于RabbitMQ内部使用,默认false
- arguments - 扩展参数
RabbitMQ Binding
Binding是 Exchange和Exchange/Queue之间的连接关系,Binding中包含RoutingKey。Binding可以是Exchange和Queue之间,也可以是Exchange和Exchange之间
- Direct Exchange和Topic Exchange进行Binding的时候,需要指定Routing key。
- Fanout Exchange和Headers Exchange进行Binding的时候,不需要指定Routing key。
Queue
Queue用于保存消息并将消息转发给消费者
Queue属性
- queue - 名称
- durable - 持久化(队列将在代理重启后继续存在)
- exclusive - 独占(仅由一个连接使用,该连接关闭时队列将被删除)
- autoDelete - 自动删除(当最后一个消费者取消订阅时,删除至少有一个消费者的队列)
- arguments - 其他参数(由插件和特定于代理的功能使用,例如消息 TTL、队列长度限制等)
Message
消息。服务器和应用程序之间传送的数据,由Properties和Payload(body)组成。
Message属性
- Delivery mode - 是否持久化
- headers - 头信息
- content_type - 传输协议
- content_encoding - 编码方式
- priority - 优先级
- correlation_id - 请求的唯一标识
- reply_to
- expiration - 消息的过期时间
- message_id - 消息的id