我在尝试理解类型 header 的交换如何工作时遇到一些问题。
只有一个交易所,myExchange
三个队列:
- myQueue1
- myQueue2
- myQueue3
绑定(bind):
- myExchange => myQueue1(x-match:任意,myHeader:[test1])
- myExchange => myQueue2(x-match:任意,myHeader:[test2])
- myExchange => myQueue3(x-match:任意,myHeader:[test1,test2,test3])
我期望消息的 header 有多个值; test1、test2、test3 的任意组合(例如:单独 test1、test1和test2、test3和test2等...)
myQueue3 仅接收具有 myHeaders 的消息:[test1, test2, test3]。我希望 myQueue3 能够获取消息,例如test1 和 test2 以及。
myQueue1 仅接收包含 myHeaders:[test1] 的消息。我希望 myQueue1 能够获取消息,例如test1 和 [test1、test2] 以及。
有什么办法可以实现这样的行为吗?谢谢
最佳答案
为此,我有一个技巧。
绑定(bind):
- myExchange => myQueue1(x-match:任意,test1:true)
- myExchange => myQueue2(x-match:任意,test2:true)
- myExchange => myQueue3(x-match:任意,test1:true,test2:true,test3:true)
myQueue1 将接收 header 包含 {test1: true} 的所有消息。
myQueue2 将接收 header 包含 {test2: true} 的所有消息。
myQueue3 将接收 header 包含 {test1: true}、{test2: true} 或 {test3: true} 之一的所有消息。
我更喜欢这个,因为 Routing Key 的长度限制为 255 个字节,但是 header 中元素数量的限制非常高。
就性能而言,我不知道什么是最好的。
关于RabbitMQ header 与列表交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28822911/