首页 > 解决方案 > 如何使用 rhea 使用 amqp 在 azure 服务总线中实现重新交付延迟

问题描述

我在 nodejs 应用程序中使用 rhea 使用 AMQP 通过 Azure 服务总线发送消息。我的问题如下:

有时,消息处理尝试可能会因为我们无法控制的事情而失败。例如,对某些 API 的调用可能会因为服务关闭而失败。那时我们解锁消息,以便稍后或由另一个实例拾取它。经过一定数量的重试后(当交付计数达到某个最大值时),它只会在 DLQ 中结束。

我想要实现的是,在每次交付尝试之间会有越来越多的暂停,因此 X 次重试不会只是快速连续发生,直到达到最大值。通过这种方式,如果只是等待某些服务再次可用,我可以给导致失败的任何时间恢复。如果这不起作用,则消息无论如何都可以转到 DLQ。

天蓝色服务总线中是否有一些设置可以实现这一点,还是我必须将它编程到我自己的应用程序中?

标签: amqpazureservicebusrhea

解决方案


如果您明确想要延迟处理,您可以使用稍后传递的 ScheduledEnqueueTime 集合将新消息排队(使用 message.Clone() 函数可以帮助创建克隆的消息)。您还可以调用 message.Defer() 并且在您稍后为该特定消息调用 Receive(Sequenceid) 之前不会再次传递此消息。


推荐阅读