我在不同的数据中心有 2 个 RabbitMQ 集群。此时我需要将其中一个交换从一只兔子铲到另一只兔子。我怎样才能实现它?
2 回答
铲子插件最适合此任务,有助于在集群之间(或同一集群内)可靠且持续地移动消息。该插件包含在 RabbitMQ 发行版中,并且易于启用(可以在其中一个集群上进行配置):
rabbitmq-plugins enable rabbitmq_shovel
如果您更喜欢 UI,请为管理 UI 启用管理插件:
rabbitmq-plugins enable rabbitmq_shovel_management
下一步是定义动态铲本身(如果您计划在集群之间永久移动消息,则使用静态铲)。文档中对铲子的声明进行了很好的定义。请考虑您需要配置src-exchange
anddest-exchange
而不是src-queue
and dest-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
是因为来源是话题交流。
除了查看目标交易所是否收到您所期望的之外,我认为没有任何方法可以检查行为。