这似乎是一个非常基本的问题,但是当消费者在承认它们之前摔倒时,我似乎正在丢失消息。我已经使用交换审计设置了代理:交换和绑定到它的队列audti:queue。两者都是持久的,如果我没有消费者处于活动状态时发送消息,他们会坐在队列中,并在消费者启动时进行处理。但是,如果我在消费者中设置一个断点并在中途停止该过程,则该消息不会被重新排队 - 它似乎只是迷路了。使用注释
设置使用者@RabbitListener(queues="audit:queue")
public void process(Message message) {
routeMessage(message) //stop here and kill process - message removed from q
}
答案 0 :(得分:0)
我无法重现您的问题。
触发断点后,我看到兔子控制台上的消息仍在队列中(unacked = 1)。
当这个过程被杀死时;消息又回来了。
您是否已将侦听器容器工厂配置为使用Acknowledgemode.NONE
?
这将展示您描述的行为。
默认值为AUTO
,这意味着只有在侦听器成功返回时才会确认消息。
如果你仍然认为有问题;请提供完整的测试用例。
答案 1 :(得分:0)
抱歉这是我的坏事(我只是浪费了几个小时......叹了口气)。我在我的想法中杀了这个应用程序。这可能会分离然后杀死进程 - 允许时间进行到足以让它确实发送确认。当我刚从终端杀死进程时,它完全按预期工作。 Particualr向你道歉,因为他也浪费你的时间。