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

How to redeliver queued messages in RabbitMQ using Langohr?

背景

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

问题

我们如何让 RabbitMQ 使用 Langohr 重新传送之前的 nack:ed 消息而无需重新启动我们的应用程序?

未送达的邮件不会自动重新送达。你想看看 recover。此方法将向 RabbitMQ 发出信号,表明必须重新传送未处理的消息。何时执行此操作取决于您的架构