消费者丢失的消息丢失了

时间:2015-11-27 13:44:46

标签: rabbitmq spring-amqp

这似乎是一个非常基本的问题,但是当消费者在承认它们之前摔倒时,我似乎正在丢失消息。我已经使用交换审计设置了代理:交换和绑定到它的队列audti:queue。两者都是持久的,如果我没有消费者处于活动状态时发送消息,他们会坐在队列中,并在消费者启动时进行处理。但是,如果我在消费者中设置一个断点并在中途停止该过程,则该消息不会被重新排队 - 它似乎只是迷路了。使用注释

设置使用者
@RabbitListener(queues="audit:queue")
public void process(Message message) {
    routeMessage(message)  //stop here and kill process - message removed from q
}

2 个答案:

答案 0 :(得分:0)

我无法重现您的问题。

触发断点后,我看到兔子控制台上的消息仍在队列中(unacked = 1)。

当这个过程被杀死时;消息又回来了。

您是否已将侦听器容器工厂配置为使用Acknowledgemode.NONE

这将展示您描述的行为。

默认值为AUTO,这意味着只有在侦听器成功返回时才会确认消息。

如果你仍然认为有问题;请提供完整的测试用例。

答案 1 :(得分:0)

抱歉这是我的坏事(我只是浪费了几个小时......叹了口气)。我在我的想法中杀了这个应用程序。这可能会分离然后杀死进程 - 允许时间进行到足以让它确实发送确认。当我刚从终端杀死进程时,它完全按预期工作。 Particualr向你道歉,因为他也浪费你的时间。