我想知道是否可以将消息从一个队列移动/合并到另一个队列。 例如:
main-queue
包含消息['cat-1','cat-2','cat-3','cat-4','dog-1','dog-2','cat-5']
dog-queue
包含消息['dog-1, dog-2, dog-3, dog-4]
所以问题是,(假设两个队列都在同一个集群上,vhost)可以使用dog-queue
将消息从main-queue
移动到rabbitmqctl
吗?
所以最后我想得到类似的东西:
main-queue
:['cat-1','cat-2','cat-3','cat-4','dog-1','dog-2','cat-5', dog-3, dog-4]
main-queue
:['cat-1','cat-2','cat-3','cat-4','dog-1','dog-2','cat-5', 'dog-1, dog-2, dog-3, dog-4]
答案 0 :(得分:14)
您正在寻找的是“铲子”插件。铲子插件内置于核心,但您必须明确启用它。它非常容易使用,因为它可以为您完成所有操作(无需手动使用/重新发布到另一个队列)。
通过cli启用铲子插件:
sudo rabbitmq-plugins enable rabbitmq_shovel
如果你通过GUI管理RabbitMQ,也要安装shovel mgmt插件:
sudo rabbitmq-plugins enable rabbitmq_shovel_management
登录GUI,您将在Admin部分下看到Shovel Management。您可以创建铲子以将消息从任何队列移动到另一个队列,甚至是远程托管的队列。您可以在铲子完成时将其删除,或将其留在那里,并在它们进入时不断移动它们。
如果您通过CLI管理RabbitMQ,您可以直接从rabbitmqctl执行铲:
sudo rabbitmqctl set_parameter shovel cats-and-dogs \
'{"src-uri": "amqp://user:pass@host/vhost", "src-queue": "dog-queue", \
"dest-uri": "amqp://user:pass@host/vhost", "dest-queue": "main-queue"}'
官方插件文档:
铲子插件 - https://www.rabbitmq.com/shovel.html
创建铲子 - https://www.rabbitmq.com/shovel-dynamic.html