amqp - 如何使用 rhea 使用 amqp 在 azure 服务总线中实现重新交付延迟
问题描述
我在 nodejs 应用程序中使用 rhea 使用 AMQP 通过 Azure 服务总线发送消息。我的问题如下:
有时,消息处理尝试可能会因为我们无法控制的事情而失败。例如,对某些 API 的调用可能会因为服务关闭而失败。那时我们解锁消息,以便稍后或由另一个实例拾取它。经过一定数量的重试后(当交付计数达到某个最大值时),它只会在 DLQ 中结束。
我想要实现的是,在每次交付尝试之间会有越来越多的暂停,因此 X 次重试不会只是快速连续发生,直到达到最大值。通过这种方式,如果只是等待某些服务再次可用,我可以给导致失败的任何时间恢复。如果这不起作用,则消息无论如何都可以转到 DLQ。
天蓝色服务总线中是否有一些设置可以实现这一点,还是我必须将它编程到我自己的应用程序中?
解决方案
如果您明确想要延迟处理,您可以使用稍后传递的 ScheduledEnqueueTime 集合将新消息排队(使用 message.Clone() 函数可以帮助创建克隆的消息)。您还可以调用 message.Defer() 并且在您稍后为该特定消息调用 Receive(Sequenceid) 之前不会再次传递此消息。
推荐阅读
- moodle - Moodle REST API 获取所有课程列表和注册该特定课程的用户
- sql - 如何在 SQL Server 的 nvarchar(max) 类型列中存在的 json 结构中添加新属性
- java - 如何匹配给定的正则表达式模式以从字符串中获取子字符串
- mongodb - Mongo Spark 连接器写入 .options(replaceDocument,false) 给出异常
- python-3.x - 从网站上抓取不断变化的整数值
- angular - Angular 5中页面刷新时注销
- azure - 如何在 Azure Batch 中上传 .bat 文件并运行该 Batch 文件
- python - 升级到 Ubuntu 18.10 后,带有 python3 的 Spyder 崩溃
- java - Java - 在 main 方法中的用户输入和调用 setter 到 main
- javascript - 我必须在 html、php、javascript 中给出一些依赖字段