【问题标题】:Redelivering unacknowledged RabbitMQ messages重新传递未确认的 RabbitMQ 消息
【发布时间】:2023-10-24 23:31:01
【问题描述】:

队列中有两条未确认的消息需要重新发送。我做了一项研究,发现我需要使用 basic.recoverbasic.nack 但是我真的不知道如何使用它们,因为我的 RabbitMQ 知识已经有一天了。请有人告诉我使用这些选项的方法吗?我找不到任何例子。

注意:可能无关紧要,但我在 MAC OSX 上使用带有 RabbitMqBundle 的 Symfony2 应用程序。

$ rabbitmqctl list_queues name messages_ready messages_unacknowledged
Listing queues ...
order_create_qu 0   2

我已阅读 How can I recover unacknowledged AMQP messages from other channels than my connection's own?Ack or Nack in rabbitMQ 的帖子,但除了重新启动服务器之外,并没有真正弄清楚如何使用建议的解决方案。

【问题讨论】:

    标签: symfony rabbitmq


    【解决方案1】:

    解决方案似乎很简单。如果您关闭具有未确认消息的连接,则消息将传递到其他连接并获取进程。就我而言,手动关闭连接 53191 解决了问题。

    ....但该消费者尚未关闭最初接收它们的通道或连接.....

    我实际上监督了上面接受的答案中提到的提示:How can I recover unacknowledged AMQP messages from other channels than my connection's own?

    【讨论】:

      【解决方案2】:

      未确认的消息将保持未确认状态,直到收到它们的消费者拒绝或确认消息,或者连接/通道已关闭。

      当连接/通道终止时,Rabbitmq 假设这些消息没有被处理,因此它们可以传递给另一个消费者。

      为了防止这种情况在未来发生,您应该在消费者中设置一些逻辑,如果消费者不对其执行任何操作,则拒绝/取消消息和/或正确关闭到 rabbitmq 的连接/通道的逻辑。

      【讨论】:

      • 您解释了它是什么以及为什么会发生,这是我已经知道但没有真正回答我的问题。