首页 > 解决方案 > RabbitMQ - 更改交换绑定

问题描述

我正在使用 RabbitMq 3.7.16,并且我有一个想要绑定到两个可能队列之一的交换。

我的用例是将交换绑定到第一个队列并将其切换到第二个队列,然后将绑定切换回来。

我目前的实施

交换是直接类型的,两者的路由键都是“”。

切换绑定时,我执行 Bind(second-queue),然后执行 Unbind(first-queue)。切换回来时,我会做相反的事情。

问题

我有几毫秒的时间,两个队列都绑定到交换器,因此接收到相同的消息。我希望每条消息都能准确到达一个可能的队列。

用 RabbitMQ 做这种事情的正确方法是什么?

标签: rabbitmq

解决方案


我的解决方案

有两个交换,一个绑定到第一个队列,另一个绑定到第二个队列。我将“alternate-exchange”属性定义为 first-exchange,它将转发任何​​无法路由到 second-exchange 的消息。

当我希望消息到达第二队列时,我只需将第一队列与第一交换解除绑定。这使得消息在交换中无法路由,因此转发到第二个交换。当我希望消息再次到达第一个队列时,我将其绑定回来。


推荐阅读