路由 RabbitMQ 主题交换中不匹配模式的消息
Routing messages in RabbitMQ topic exchange that do NOT match a pattern
两个队列绑定到具有以下路由键的主题交换:
队列 A,绑定了路由键模式匹配 *.foo
队列 B,绑定了路由键模式匹配 *.bar
我想向此交换器添加第三个队列,以接收既不是 foo
消息也不是 bar
消息的消息。如果我用 #
路由键绑定这个队列,我自然会得到我需要的所有消息,但包括我不想要的 foo
和 bar
。
有什么方法可以路由消息修补模式 NOT *.foo
和 NOT *.bar
吗?
如果您想捕获所有不匹配任何绑定的消息,可以使用 Alternate Exchange 来完成。
为现有的交换器添加备用交换器并收集来自该备用交换器的所有消息:
standard workflow --> [main exchange (topic)]
| --> via binding *.foo --> [foo queue]
| --> via binding *.bar --> [bar queue]
v
[alternate exchange (let it be topic too)]
--> via binding * --> []
对于更具体的情况,当您有 N 个绑定但您想捕获所有与 M 个绑定不匹配的消息(其中 M < N)时,问题更大,但技术上可以通过 Dead Letter Exchange 完成然后将其发布到只有 M 绑定的自定义交换,然后将案例应用于备用交换。但它甚至听起来生疏,甚至不考虑性能下降(仅在消息流非常高时应用)。
两个队列绑定到具有以下路由键的主题交换:
队列 A,绑定了路由键模式匹配 *.foo
队列 B,绑定了路由键模式匹配 *.bar
我想向此交换器添加第三个队列,以接收既不是 foo
消息也不是 bar
消息的消息。如果我用 #
路由键绑定这个队列,我自然会得到我需要的所有消息,但包括我不想要的 foo
和 bar
。
有什么方法可以路由消息修补模式 NOT *.foo
和 NOT *.bar
吗?
如果您想捕获所有不匹配任何绑定的消息,可以使用 Alternate Exchange 来完成。
为现有的交换器添加备用交换器并收集来自该备用交换器的所有消息:
standard workflow --> [main exchange (topic)]
| --> via binding *.foo --> [foo queue]
| --> via binding *.bar --> [bar queue]
v
[alternate exchange (let it be topic too)]
--> via binding * --> []
对于更具体的情况,当您有 N 个绑定但您想捕获所有与 M 个绑定不匹配的消息(其中 M < N)时,问题更大,但技术上可以通过 Dead Letter Exchange 完成然后将其发布到只有 M 绑定的自定义交换,然后将案例应用于备用交换。但它甚至听起来生疏,甚至不考虑性能下降(仅在消息流非常高时应用)。