如何将消息复制到 RabbitMQ 上的另一个队列?

Posted

技术标签:

【中文标题】如何将消息复制到 RabbitMQ 上的另一个队列?【英文标题】:How to copy messages to another queue on RabbitMQ? 【发布时间】:2019-01-07 11:50:57 【问题描述】:

使用 RabbitMQ 作为代理,我想将所有消息从一个队列复制到另一个队列以进行测试/调试。通过 RabbitMQ Web 管理控制台/cli 最简单的方法是什么?

附:在指定队列的 Web 控制台下,我只能 Move messages 而不是 Copy messages 到新队列。

【问题讨论】:

【参考方案1】:

当我需要执行此类任务时,我会执行以下操作(假设您要复制参考队列中的所有消息):

    如果他未绑定到任何队列,则创建一个扇出交换或使用默认交换 (amq.fanout) 将引用队列绑定到它 将“重复”队列绑定到它 配置铲子将参考队列中的所有消息发送到您绑定到两个队列的交换器,自动删除设置为“初始长度转移后”

但这确实意味着,如果消息通过其正常流程到达参考队列,它们将最终位于队列的顶部,“复制”消息在后面/与它们混合

【讨论】:

我创建了一个 bash 脚本 here,它使用管理 HTTP API 实现了这个方法。【参考方案2】:

如果交换是直接交换,只需创建另一个具有相同路由键的队列

【讨论】:

【参考方案3】:

转到 http://localhost:15672/#/queues

    创建虚拟主机 (vhost=testhost) 使用 vhost(Test1, Test2) 创建两个队列 创建交换Test_exchange:http://localhost:15672/#/exchanges 在 Test_exchange 上绑定这些队列(Test1 和 Test2) 安装铲子 sudo rabbitmq-plugins enable rabbitmq_shovel sudo rabbitmq-plugins enable rabbitmq_shovel_management 使用管理铲选项卡添加铲 URI: amqp://user:pass@localhost:5672/vhost (这是您要创建副本的参考队列,如果有则为 vhost) 来源

目标 URI:amqp://user:pass@localhost:5672/Test_exchnage

队列名称:“Test_exchange”

您可以将消息发送到您的参考队列。

【讨论】:

【参考方案4】:

有一个商业工具,QueueExplorer(免责声明 - 我是作者),它允许您复制消息等。

【讨论】:

以上是关于如何将消息复制到 RabbitMQ 上的另一个队列?的主要内容,如果未能解决你的问题,请参考以下文章

将“回复”队列中的消息复制到另一个队列

java如何获取rabbitmq队列中消息数量

如何使用 nodejs 将消息发送到 RabbitMQ 队列

RabbitMQ如何确保消息不丢失?

镜像队列

C#利用RabbitMQ实现消息订阅与发布