RabbitMQ Exchange的四种模式

2022-07-23  本文已影响0人  缓慢移动的蜗牛

一、什么是Exchange

RabbitMQ 是 AMQP(高级消息队列协议)的标准实现


从 AMQP 协议可以看出,Queue、Exchange 和 Binding 构成了 AMQP 协议的核心

二、Exchange的类型

RabbitMQ常用的Exchange Type有fanout、direct、topic、headers这四种

fanout

fanout类型的Exchange路由规则非常简单,它会把所有发送到fanout Exchange的消息都会被转发到与该Exchange 绑定(Binding)的所有Queue上。


Fanout Exchange 不需要处理RouteKey 。只需要简单的将队列绑定到exchange 上。这样发送到exchange的消息都会被转发到与该交换机绑定的所有队列上。类似子网广播,每台子网内的主机都获得了一份复制的消息。所以,Fanout Exchange 转发消息是最快的。

direct

direct类型的Exchange路由规则也很简单,它会把消息路由到那些binding keyrouting key完全匹配的Queue中。

direct Exchange是RabbitMQ Broker的默认Exchange,它有一个特别的属性对一些简单的应用来说是非常有用的,在使用这个类型的Exchange时,可以不必指定routing key的名字,在此类型下创建的Queue有一个默认的routing key,这个routing key一般同Queue同名。

direct模式,可以使用rabbitMQ自带的Exchange:default Exchange 。所以不需要将Exchange进行任何绑定(binding)操作 。消息传递时,RouteKey必须完全匹配,才会被队列接收,否则该消息会被抛弃。

topic

前面讲到direct类型的Exchange路由规则是完全匹配binding keyrouting key,但这种严格的匹配方式在很多情况下不能满足实际业务需求。topic类型的Exchange在匹配规则上进行了扩展,它与direct类型的Exchage相似,也是将消息路由到binding keyrouting key相匹配的Queue中,但这里的匹配规则有些不同,它约定:

所有发送到Topic Exchange的消息,会拿routing key与binging key进行模糊匹配。因此“log.#”能够匹配到“log.info.oa”,但是“log.*” 只会匹配到“log.error”

headers

headers类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。
在绑定Queue与Exchange时指定一组键值对;当消息发送到Exchange时,RabbitMQ会取到该消息的headers(也是一个键值对的形式),对比其中的键值对是否完全匹配Queue与Exchange绑定时指定的键值对;如果完全匹配则消息会路由到该Queue,否则不会路由到该Queue。


上一篇下一篇

猜你喜欢

热点阅读