重新传递未经确认的RabbitMQ消息

时间:2016-01-31 18:15:53

标签: symfony rabbitmq

我在队列中有两条未确认的消息需要重新传递。我做了一项研究,发现我需要使用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个帖子,但除了重新启动服务器之外,并没有真正解决如何使用建议的解决方案。

enter image description here enter image description here

2 个答案:

答案 0 :(得分:0)

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

当连接/通道死亡时,Rabbitmq假定这些消息未被处理,因此它们可用于传递给另一个消费者。

为了防止将来发生这种情况,如果消费者不会对它做任何事情和/或正确关闭连接/通道的逻辑,那么消费者应该有一些拒绝/拒绝消息的逻辑。的RabbitMQ。

答案 1 :(得分:0)

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

  

....但是该消费者还没有关闭它最初接收它们的频道或连接.......

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