Clojure 如何使用Langohr在RabbitMQ中重新传递排队消息?

Clojure 如何使用Langohr在RabbitMQ中重新传递排队消息?,clojure,rabbitmq,amqp,langohr,Clojure,Rabbitmq,Amqp,Langohr,背景 我们使用Langohr(版本3.4.0)使用RabbitMQ的消息,并尝试将它们持久化到MongoDB中。我们没有使用auto-ack,因为如果我们无法在MongoDB中持久化消息,我们希望能够稍后重试。我们正在使用函数来适应这一点。今晚MongoDB发生了一次临时中断,并短暂停机,在此期间有40条消息无法持久化,因此保留在RabbitMQ队列中。但当MongoDB再次出现时,我们的Langohr处理程序刚刚收到新消息。在我们重新启动应用程序之前,旧版本没有交付给我们 问题 如何让Rabb

背景

我们使用Langohr(版本3.4.0)使用RabbitMQ的消息,并尝试将它们持久化到MongoDB中。我们没有使用
auto-ack
,因为如果我们无法在MongoDB中持久化消息,我们希望能够稍后重试。我们正在使用函数来适应这一点。今晚MongoDB发生了一次临时中断,并短暂停机,在此期间有40条消息无法持久化,因此保留在RabbitMQ队列中。但当MongoDB再次出现时,我们的Langohr处理程序刚刚收到新消息。在我们重新启动应用程序之前,旧版本没有交付给我们

问题


如何让RabbitMQ使用Langohr重新传递以前的nack:ed消息,而不必重新启动应用程序?

未传递的消息不会自动重新传递。你想看看吗 . 此方法将向RabbitMQ发送信号,该RabbitMQ必须重新传递未处理的消息。当您这样做时,这取决于您的体系结构

即使“langohr.core/automatic recovery enabled”(langohr.core/automatic recovery enabled)是真的,也需要这样做吗?根据,这只适用于传输层(TCP连接)。因此,在触发恢复之前,客户端和队列之间的TCP连接必须中断。在OP的案例中,这种连接很好