【问题标题】:RabbitMQ moving messages from 1 Queue to anotherRabbitMQ 将消息从 1 个队列移动到另一个队列
【发布时间】:2015-07-23 13:59:57
【问题描述】:

我在我的 java 应用程序中使用 RabbitMQ。

我想将消息从 1 个队列移动到另一个队列。

我在这里找到的答案对我有帮助 Is it possible to move / merge messages between RabbitMQ queues?.

但在运行该命令时,没有成功或失败消息。

如何在运行时确保这一点? 我正在使用的命令

rabbitmqctl set_parameter shovel my-shovel '{"src-uri": "amqp://localhost", "src-queue": "myQueue", \
 "dest-uri": "amqp://localhost", "dest-queue": "test3"}'

还有输出

将组件“shovel”的运行时参数“my-shovel”设置为 "{\"src-uri\": \"amqp://localhost\", \"src-queue\": \"myQueue\", \"dest-uri\": \"amqp://localhost\", \"dest-queue\": \"test3\"}" ...

【问题讨论】:

  • 你的铲子插件激活了吗?你也需要这样做一次吗?或者你打算一直这样做?
  • 我需要多次这样做。是的,铲子处于活动状态
  • 您使用交易所吗?您可以将多个队列绑定到同一个交换。每当有新消息到达您的交换器时,它都会自动路由到两个队列。
  • @bhdrkn 我在 RabbitMQ 之上提供了一个接口。如果队列 q1 有任何问题,我想将消息移动到 q2。
  • “队列问题”是什么意思?如果您有错误消息,当您在客户端收到异常时,它会自动推回同一队列。但是您可以轻松捕获这些异常并将其推送到不同的队列。

标签: java rabbitmq message-queue


【解决方案1】:

另一种方法是为生存时间或队列大小设置 RabbitMQ 策略。然后,设置一个策略来处理消息的去向。这将使第一个队列中的消息过期并将它们发送到第二个队列。如何做到这一点的参考是herehere

【讨论】:

    【解决方案2】:

    如果您启用了 rabbitmq_shovel_management 插件,您可以在管理选项卡下的 Web 管理控制台中查看配置的铲子及其状态。

    【讨论】: