我正在使用RabbitMQ和Spring amqp,我宁愿不丢失消息。通过使用指数退避策略进行重试,我可能会阻止我的消费者,他们可以处理他们可以处理的消息。我想在几天内通过指数退避策略重试失败的消息,但我不想让消费者阻止好几天,我希望它继续处理其他消息。
我知道我们可以使用ActiveMQ(Retrying messages at some point in the future (ActiveMQ))实现这种功能,但无法为RabbitMQ找到类似的解决方案。
有没有办法用Spring amqp和RabbitMQ来实现这个目标?
答案 0 :(得分:0)
你可以通过死信交换来做到这一点。拒绝该消息并将其路由到DLE / DLQ并拥有一个单独的侦听器容器,该容器从DLQ中消耗并根据需要停止/启动该容器。
或者,您可以使用RabbitTemplate
receive
(或receiveAndConvert
)方法(按计划)轮询DLQ而不是第二个容器,并将失败的消息路由回来到主要队列。