rabbitmq
是基于AMQP通信协议实现的高效的消息中间件,在rabbitmq中,exchange
交换机扮演着接收生产者生产的消息的角色。同时exchange
交换机还需要将接收到的消息传递给queue
队列进行存储或消费,在将exchange
中的消息传递给queue
的过程中,exchange
扮演着重要的角色,不同类型的exchange
配合着routing_key
就能按照exchange
类型对应的路有规则将消息传递到指定的某个或者某些queue
队列。
exchange分类
在
rabbitmq
中exchange
有四种类型,分别是direct
、fanout
、topic
、headers
,下面将主要介绍direct
、fanout
、topic
三种常用类型的exchange的路有规则。
direct类型
27b15095-5d93-3d7c-bc34-2c50aba7ea1f对于
direct
类型的exchange
,在接收到生产者发送的消息时会将消息路由给与该exchange绑定的且与该消息的routing_key
同名的queue
队列。如果exchange
上未绑定与routing_key
同名的queue
,消息将会被抛弃。对于
rabbitmq
的每一个vhost
,都存在一个默认名称为AMQP default
且不能被删除的exchange
,这个默认的exchange
的类型就是Direct
,这个exchange
会隐式绑定到vhost
的每个queue
队列上,并且任何queue
队列都不能显式地绑定或解除绑定该默认exchange
。如果需要使用该默认exchange
接收并路由消息,只需在发消息时指定exchange=""
即可。
fanout类型
8df753ef-209c-353d-9dd6-fe2710d7856b对于
fanout
类型的exchange
交换机,消息路由的处理非常简单,fanout
类型的exchange
会将接收到的消息路由投递到所有与其绑定的queue
队列上,此种类型exchange消息路由与routing_key无关。
topic类型
59ec574a-818a-3bb9-a774-a52e3cf44643文档,发送到主题交换机(topic exchange)的消息不可以携带随意什么样子的路由键(routing_key),它的路由键必须是一个由
.
分隔开的词语列表。这些单词随便是什么都可以,但是最好是跟携带它们的消息有关系的词汇。以下是几个推荐的例子:"stock.usd.nyse", "nyse.vmw", "quick.orange.rabbit"。词语的个数可以随意,但是不要超过255字节。
exchange
和queue
的绑定键也必须拥有同样的格式。主题交换机背后的逻辑跟直连交换机很相似——一个携带着特定路由键的消息会被主题交换机投递给绑定键与之想匹配的队列。但是它的绑定键和路由键有两个特殊应用方式:
*
(星号) 用来表示一个单词
#
(井号) 用来表示任意数量(零个或多个)单词
网友评论