如何配置RabbitMQ铲子?

问题描述

我在单独的数据中心中有2个RabbitMQ集群。此时此刻,我需要把一只兔子中的一只交换给另一只兔子。我该如何实现?

解决方法

shovel plugin最适合此任务,有助于在群集之间(或同一群集内)可靠且连续地移动消息。此插件包含在RabbitMQ发行版中,并且易于启用(可以在集群之一上进行配置):

rabbitmq-plugins enable rabbitmq_shovel

如果您喜欢UI,请为Management UI启用管理插件:

rabbitmq-plugins enable rabbitmq_shovel_management 

下一步是定义dynamic shovel本身(如果您打算永久在群集之间移动消息,请使用static shovel)。在documentation中很好地定义了铲的声明。请注意,您需要配置src-exchangedest-exchange而不是src-queuedest-queue

,

为补充Sergii的回答,以下是我如何从生产集群到测试集群创建铲子。

call rabbitmqctl.bat set_parameter shovel [shovel_name] "{""src-protocol"": ""amqp091"",""src-uri"":""amqp://[username]:[password]@localhost"",""src-exchange"": ""[source_exchange]"",""src-exchange-key"": ""#"",""dest-protocol"": ""amqp091"",""dest-uri"": ""amqp://[username]:[password]@[target_cluster_server]"",""dest-exchange"": ""[target_exchange]""}"

它会创建一个动态铲,我更喜欢它,因为它将自动将其自动复制到源集群中的其他节点。

您可以在dest-uri中提供多个目的地,因此,如果目标节点处于下降状态,则铲将尝试另一个目的地。

src-exchange-key是因为源是主题交流。

除了查看目标交易所是否收到您的期望之外,我认为没有任何其他方法可以检查行为。

https://www.rabbitmq.com/shovel.html#clustering