在RabbitMQ主题交换中路由不匹配模式的消息

6

两个队列与主题交换机绑定,其路由键如下:

队列A,使用路由键模式匹配*.foo
队列B, 使用路由键模式匹配*.bar

我想向此交换机添加第三个队列,以接收既不是foo消息也不是bar消息的消息。如果我使用#路由键绑定此队列,则自然获取所有需要的消息,但包括我不需要的foobar

有没有一种方式可以路由匹配模式NOT *.foo AND NOT *.bar的消息?

1个回答

7
如果你想捕获所有不符合任何绑定的消息,可以使用备用交换器
为现有的一个添加备用交换器,并从这些备用交换器中收集所有消息:
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个绑定的自定义交换机中,然后应用备用交换机的情况。但这甚至听起来都很陈旧,更别提性能下降了(仅适用于真正高的消息流量)。


我建议不要使用AE,因为添加新的绑定(即带有'#'的观察者)将阻止AE/回退工作。这是在现实生活中可能发生的事情,并会导致意想不到的交互使事情变得非常糟糕。 - user2864740

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接