集群中的 RabbitMQ Shovel 插件
RabbitMQ Shovel plugin in a cluster
我们有一个配置了三个节点的 RabbitMQ 集群。每个节点都有两个虚拟主机(Vhost-A 和 Vhost-B)。我们需要将消息从 Vhost-A 移动到 Vhost-B 的可能性。为此,我们设置了一个铲子,将消息从 Vhost-A 上的 Exchange-1 定向到 Vhost-B 上的 Exchange-2。
rabbitmqctl -p Vhost-A set_parameter shovel shovel-exchange-1-to-vhost-b /
'{"src-uri": "amqp://user@/Vhost-A", "src-exchange": "Exchange-1", /
"src-exchange-key": "#", "dest-uri": "amqp://user@/Vhost-B", /
"dest-exchange": "Exchange-2", "add-forward-headers": false, /
"ack-mode": "on-confirm", "delete-after": "never"}'
这具有在目标 Exchange-2 上复制邮件的副作用。意思是,我们绑定到 Vhost-B 上的 Exchange-2 的测试队列收到同一条消息三次(一次来自每个集群节点)。
我们如何防止这种情况发生?是否需要更改铲配置或集群配置?
RabbitMQ 版本:3.6.15
更新 1:
我们有两个无法删除的独占队列,因为它们被锁定了。一旦我们在所有集群节点上禁用 shovel 插件,这些队列就会消失。一旦我们在一个节点上重新激活插件,就会再次创建队列。
似乎是配置错误。我手动测试了 shovel 插件,我必须将 shovel 配置添加到根 ('/') 虚拟主机。出于某种原因,这些没有显示在管理控制台中。使用
rabbitmqctl list_parameters
我在根虚拟主机上看到了两个额外的铲子配置。放下那些铲子后,相应的队列也被删除了。如问题中所述添加铲子添加了铲子并创建了一个队列。此后,该消息仅转发一次。
感谢@Olivier 暗示多把铲子。那条评论让我走上了正确的道路。
我们有一个配置了三个节点的 RabbitMQ 集群。每个节点都有两个虚拟主机(Vhost-A 和 Vhost-B)。我们需要将消息从 Vhost-A 移动到 Vhost-B 的可能性。为此,我们设置了一个铲子,将消息从 Vhost-A 上的 Exchange-1 定向到 Vhost-B 上的 Exchange-2。
rabbitmqctl -p Vhost-A set_parameter shovel shovel-exchange-1-to-vhost-b /
'{"src-uri": "amqp://user@/Vhost-A", "src-exchange": "Exchange-1", /
"src-exchange-key": "#", "dest-uri": "amqp://user@/Vhost-B", /
"dest-exchange": "Exchange-2", "add-forward-headers": false, /
"ack-mode": "on-confirm", "delete-after": "never"}'
这具有在目标 Exchange-2 上复制邮件的副作用。意思是,我们绑定到 Vhost-B 上的 Exchange-2 的测试队列收到同一条消息三次(一次来自每个集群节点)。
我们如何防止这种情况发生?是否需要更改铲配置或集群配置?
RabbitMQ 版本:3.6.15
更新 1:
我们有两个无法删除的独占队列,因为它们被锁定了。一旦我们在所有集群节点上禁用 shovel 插件,这些队列就会消失。一旦我们在一个节点上重新激活插件,就会再次创建队列。
似乎是配置错误。我手动测试了 shovel 插件,我必须将 shovel 配置添加到根 ('/') 虚拟主机。出于某种原因,这些没有显示在管理控制台中。使用
rabbitmqctl list_parameters
我在根虚拟主机上看到了两个额外的铲子配置。放下那些铲子后,相应的队列也被删除了。如问题中所述添加铲子添加了铲子并创建了一个队列。此后,该消息仅转发一次。
感谢@Olivier 暗示多把铲子。那条评论让我走上了正确的道路。