RabbitMQ header 与列表交换

标签 rabbitmq message-queue rabbitmq-exchange

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

只有一个交易所,myExchange

三个队列:

  1. myQueue1
  2. myQueue2
  3. myQueue3

绑定(bind):

  1. myExchange => myQueue1(x-match:任意,myHeader:[test1])
  2. myExchange => myQueue2(x-match:任意,myHeader:[test2])
  3. myExchange => myQueue3(x-match:任意,myHeader:[test1,test2,test3])

我期望消息的 header 有多个值; test1test2test3 的任意组合(例如:单独 test1test1test2test3test2等...)

myQueue3 仅接收具有 myHeaders 的消息:[test1, test2, test3]。我希望 myQueue3 能够获取消息,例如test1test2 以及。

myQueue1 仅接收包含 myHeaders:[test1] 的消息。我希望 myQueue1 能够获取消息,例如test1 和 [test1test2] 以及。

有什么办法可以实现这样的行为吗?谢谢

最佳答案

为此,我有一个技巧。

绑定(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/

相关文章:

erlang - 无法启动rabbitmq-server

erlang - tlsv1 警告 rabbitmq 安全性不足

c# - 将消息插入到 RabbitMQ 中的特定队列

c++ - OnShow 事件上的 ProcessMessages c++ builder

c# - Rabbitmq 使用 .NET 使用单个同步调用检索多条消息

Rabbitmq 文件描述符限制

java - 确保至少一个消费者收到在主题交换上发布的消息

node.js - 使用 Node 来使用 RabbitMQ - 限制并行处理

bash - 使用 rabbitmq docker 镜像在 rabbitmq.config 中配置 ssl

while-loop - 为什么阻塞函数不使用 100% CPU?