RabbitMQ标题与列表交换

时间:2015-03-03 02:08:03

标签: rabbitmq message-queue rabbitmq-exchange

我在尝试了解标题类型的交换是如何工作时遇到了一些问题。

只有一个交换,myExchange

三个队列:

  1. myQueue1
  2. myQueue2
  3. myQueue3
  4. 绑定:

    1. myExchange => myQueue1(x-match:any,myHeader:[test1])
    2. myExchange => myQueue2(x-match:any,myHeader:[test2])
    3. myExchange => myQueue3(x-match:any,myHeader:[test1,test2,test3])
    4. 我希望邮件的标题有多个值; test1 test2 test3 的任意组合(例如: test1 test1 test2 test3 test2 等......)

      myQueue3 只有在拥有myHeaders的情况下才会收到消息:[ test1,test2,test3 ]。我希望 myQueue3 来获取消息,例如 test1 test2

      myQueue1 只有在拥有myHeaders的情况下才会收到消息:[ test1 ]。我希望 myQueue1 来获取消息,例如 test1 和[ test1 test2 ]。

      有没有办法实现这种行为?谢谢

2 个答案:

答案 0 :(得分:0)

我同意这些评论,我试图实现目前不支持的东西。我将使用路由键。

答案 1 :(得分:0)

为此,我有一个窍门。

绑定:

  • myExchange => myQueue1(x匹配:任意,test1:是)
  • myExchange => myQueue2(x匹配:任意,test2:是)
  • myExchange => myQueue3(x匹配:任意,test1:true,test2:true,test3:true)

myQueue1将收到标头包含{test1:true}的所有消息。

myQueue2将收到标头包含{test2:true}的所有消息。

myQueue3将收到标头包含以下消息之一的所有消息:{test1:true},{test2:true}或{test3:true}。

我更喜欢这样做,因为路由密钥限制为255个字节,但是标头中元素的数量限制非常高。

为了性能,我不知道这是最好的。