RabbitMQ主题绑定,他们有优先权吗?

时间:2015-03-10 22:41:53

标签: rabbitmq

RabbitMQ Fifth Tutorial中(对于Ruby,但它们对所有语言都是相同的),他们提到:

  

我们创建了三个绑定:Q1绑定了绑定键“*.orange.*”   和Q2包含“*.*.rabbit”和“lazy.#

然后:

  

lazy.pink.rabbit”只会被传递到第二个队列一次,   即使它匹配两个绑定。

这怎么可能?据我所知,如果路由密钥匹配45个队列,它将转到所有45个队列。为什么这不是这种情况呢?

1 个答案:

答案 0 :(得分:2)

Q2有两个绑定,它们都匹配单个消息。根据 AMQP 0.9.1 specification, section 1.7.2.3. Method queue.bind(第35页):

  

即使队列有多个与消息匹配的绑定,服务器也不能多次向队列传递相同的消息。

     

测试场景

     

客户端声明一个命名队列,并使用多个绑定将其绑定到   amq.topic交换。然后,客户端发布一条与其所有绑定匹配的消息。

因此,当lazy.pink.rabbit路由密钥与*.*.rabbitlazy.#路由密钥匹配时,该邮件不会被复制到Q2,并且只有该邮件的一个副本将驻留在Q2

P.S:

有很好的Compatibility and Conformance RabbitMQ文档页面,其中包含一个地方的所有规范。