当RabbitMQ从队列中删除消息?

8

首先我声明了exchange,queue并将它们绑定在一起。我使用basicPublish方法向这个queue发送了一条消息,因此现在队列中有一条消息。在这个时候,我启动我的消费者程序(使用autoAck = true),并进行调试。当我运行到basicConsume(xxx)时,消息丢失了!我认为当消费者运行到方法nextDelivery()时,它会向broker发送一个basic.ack,但实际上,当我声明消费者时,队列中的消息已经被取走了。为什么?有人能告诉我rabbitmq是在哪个方法之后从队列中删除消息的吗?是在basicConsume()还是nextDelivery()之后呢?谢谢~~~

1个回答

18

autoAck = true

由于这个设定,你告诉RabbitMQ在消费消息时自动确认该消息。确认一条消息意味着告诉RabbitMQ已经处理完毕,可以删除了。

如果你想在处理完消息后手动确认,请将autoAck设置为false。


2
谢谢Derick Bailey!我昨天已经阅读了源代码。我发现,当我启动一个消费者而未运行nextDelivery()时,它将获取消息并保存在本地队列中。 - chris.lin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接