两个队列使用以下路由键绑定(bind)到主题交换:
队列 A,与路由键模式匹配绑定(bind) *.foo
队列 B,与路由键模式匹配绑定(bind) *.bar
我想向这个交换添加第三个队列,它接收既不是 foo
的消息。消息或 bar
消息。如果我将此队列与 #
绑定(bind)路由键,我自然会得到我需要的所有消息,但包括foo
的和 bar
是我不想要的。
路由消息的任何方式修补模式NOT *.foo
和 NOT *.bar
?
最佳答案
如果你想捕获所有不匹配任何绑定(bind)的消息,可以使用 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 个绑定(bind)但您想捕获所有与 M 个绑定(bind)不匹配的消息(其中 M < N)时,问题会更大,但技术上可以通过 Dead Letter Exchange 完成。然后将其发布到只有 M 绑定(bind)的自定义交换,然后使用备用交换应用案例。但它甚至听起来生疏,甚至不考虑性能下降(仅在消息流非常高时应用)。
关于rabbitmq - 在 RabbitMQ 主题交换中路由与模式不匹配的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28351469/