【问题标题】:Is it possible to move / merge messages between RabbitMQ queues?是否可以在 RabbitMQ 队列之间移动/合并消息?
【发布时间】:2013-06-09 03:11:39
【问题描述】:

我想知道是否可以将消息从一个队列移动/合并到另一个队列。 例如:

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)可以使用rabbitmqctl 将消息从dog-queue 移动到main-queue 吗?

所以最后我希望得到类似的东西:

理想情况下:

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]

【问题讨论】:

  • 我认为您可能需要关注主题交流

标签: python queue rabbitmq amqp pika


【解决方案1】:

您正在/正在寻找的是“铲子”插件。铲子插件内置在核心中,但您必须明确启用它。它真的很容易使用,因为它可以为您完成所有工作(无需手动消费/重新发布到另一个队列)。

通过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执行shovel:

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

【讨论】:

  • 非常感谢,太好了!
  • 没错。我没有注意到它可能通过铲子。感谢您提供正确答案,对错误答案深表歉意。
  • 请注意,您不必在每台机器上都启用 shovel 插件,而您甚至可以在某些远程机器上进行设置,并且源服务器和目标服务器都有远程服务器。
  • @rocksfrow,不必在所有节点上安装rabbitmq_management
  • @zaq178miami 我更新了我的答案并删除了关于在每个节点上安装管理插件的注释,尽管我个人仍然认为你应该在所有节点上安装插件——否则你可能会遇到节点故障后的管理问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 2023-04-08
  • 1970-01-01
  • 2011-03-15
  • 2013-08-09
  • 1970-01-01
相关资源
最近更新 更多