azureservicebus - 逻辑应用:Servicebus Polling 触发器多次处理消息
问题描述
我有一个逻辑应用程序轮询服务总线队列。通过逻辑应用程序的并发控制,我将其限制为最多 5 个并发实例。我使用触发器“当队列中收到消息时(自动完成)”
例如,当将 8 条消息放入队列时,它处理 5 条,然后在轮询间隔到期(5 分钟)后处理 4 条……我注意到有一条消息被第二次处理(DeliveryCount = 2)。该消息的第一个逻辑应用实例未引发错误并在 20 秒后完成。
我尝试将锁定超时时间提高到 5 分钟,但行为没有改变。我也希望自动完成触发器能够立即完成消息,所以我认为锁不会过期。
我尝试将 Max Delivery Count 降低到 1.. 但随后我的消息被死信(即使第一次尝试成功完成)。DeadletterError 是“1 次传递尝试后无法使用消息。”
我可以重现这一点,每次都会有一条随机消息被处理两次。如果我在队列中抛出更多消息,则重复的数量会增加。
我在具有不同逻辑应用的多个队列上看到了这种行为。
逻辑应用规格:
- “当队列中收到消息时(自动完成)”触发器
- 5 分钟轮询间隔
- 最多 5 个并发实例
队列规格:
- 消息 TTL 14 天
- 锁定持续时间 5 分钟
- 重复检测历史 10 分钟
- 最大交货计数 10
任何提示都是最受欢迎的!提前致谢!
解决方案
如果逻辑应用在时间 > 锁定周期内处理消息,则下一次运行将获取相同的消息。所以你可能想检查一下。
一种方法是在阅读逻辑应用程序后立即删除消息。如果逻辑应用失败,则将该消息放入死信队列。
推荐阅读
- r - R sweave 仅生成 .eps
- apache-spark - 使用 jdbc slow 将 Spark 数据帧写入数据库(Exasol)
- python - 在用python生成的图中添加一些数字
- python - for循环求和中的for循环正在覆盖数据值python
- function - 无法到达函数中的类参数
- node.js - 意外的令牌:在 JSON 中的位置 603069
- javascript - 在 React 中更新切片渲染数组
- python - Pycharm:无法设置属性
- sapui5 - OPA5:如何确保每次测试都在全新的环境中开始?
- python - 将 Python 变量导入 HTML