六种消息模式
在 RabbitMQ 中,出现了六种消息传播模式: RabbitMQ 官网说明的六种模式
1.Simple Work Queue (简单工作队列):也就是常说的点对点模式,一条消息由一个消费者进行消费。(当有多个消费者时,默认使用轮训机制把消息分配给消费者)。
2.Work Queues (工作队列):也叫公平队列,能者多劳的消息队列模型。队列必须接收到来自消费者的 手动ack 才可以继续往消费者发送消息。
3.Publish/Subscribe (发布订阅模式):一条消息被多个消费者消费。
4.Routing(路由模式):有选择的接收消息。
5.Topics (主题模式):通过一定的规则来选择性的接收消息
6.RPC 模式:发布者发布消息,并且通过 RPC 方式等待结果。目前这个应该场景少,而且代码也较为复杂,本章不做细讲。
注意:官网最后有 Publisher Confirms 为消息确认机制。指的是生产者如何发送可靠的消息。
RabbitMQ 的四种 Exchange
在了解这些消息模式的时候,引入了一个概念 Exchange(交换机):
在发布订阅里面有对这个概念做解释:
RabbitMQ消息传递模型中的核心思想是生产者从不将任何消息直接发送到队列。实际上,生产者经常甚至根本不知道是否将消息传递到任何队列。
相反,生产者只能将消息发送到交换机。交流是一件非常简单的事情。一方面,它接收来自生产者的消息,另一方面,将它们推入队列。交易所必须确切知道如何处理收到的消息。是否应将其附加到特定队列?是否应该将其附加到许多队列中?还是应该丢弃它。规则由交换机类型定义 。
而 Exchange 的类型有下面四种:
direct(直连交换机):将队列绑定到交换机,消息的 routeKey 需要与队列绑定的 routeKey 相同。
fanout (扇形交换机):不处理 routeKey ,直接把消息转发到与其绑定的所有队列中。
topic(主题交换机):根据一定的规则,根据 routeKey 把消息转发到符合规则的队列中,其中 # 用于匹配符合一个或者多个词(范围更广), * 用于匹配一个词。
headers (头部交换机):根据消息的 headers 转发消息而不是根据 routeKey 来转发消息, 其中 header 是一个 Map,也就意味着不仅可以匹配字符串类型,也可以匹配其他类型数据。 规则可以分为所有键值对匹配或者单一键值对匹配。
其实在这里我们差不多可以得出消息模型与 Exchange 的关系比
消息模式 交换机
Simple Work Queue (简单工作队列),Work Queues (工作队列) 空交换机
Publish/Subscribe (发布订阅模式) fanout (扇形交换机)
Routing(路由模式) direct (直连交换机)
Topics(主题模式) topic(主题交换机)
801

被折叠的 条评论
为什么被折叠?



