逻辑应用:Servicebus 轮询触发器多次处理消息

jco*_*s85 7 azureservicebus azure-servicebus-queues azure-logic-apps

我有一个轮询服务总线队列的逻辑应用程序。通过逻辑应用程序的并发控制,我将其限制为最多 5 个并发实例。我使用触发器“当在队列中收到消息时(自动完成)”

例如,当将 8 条消息放入队列时,它处理 5 条,然后在轮询间隔到期(5 分钟)后处理 4 条......我注意到有一条消息第二次处理(DeliveryCount = 2)。该消息的第一个逻辑应用实例未引发错误并在 20 秒后完成。

我尝试将锁定超时提高到 5 分钟,但行为没有改变。我还希望自动完成触发器能够立即完成消息,所以我认为锁不会过期。

我尝试将 Max Delivery Count 降低到 1.. 但随后我的消息被删除(即使第一次尝试成功完成)。DeadletterError 是“尝试传递 1 次后无法使用消息。”

我可以重现这一点,每次都有一个随机消息被处理两次。如果我在队列中抛出更多消息,重复的数量就会增加。

我在具有不同逻辑应用程序的多个队列上看到了这种行为。

逻辑应用规范:

  • “当在队列中收到消息时(自动完成)”触发器
  • 5 分钟轮询间隔
  • 最多 5 个并发实例

队列规格:

  • 消息 TTL 14 天
  • 锁定持续时间 5 分钟
  • 重复检测历史 10 分钟
  • 最大交付数量 10

任何提示都是最受欢迎的!提前致谢!

MeD*_*per 1

如果逻辑应用在时间 > 锁定期内处理消息,则下次运行将拾取相同的消息。所以你可能想检查一下。

一种方法可能是在逻辑应用中读取消息后立即删除该消息。如果逻辑应用失败,则将该消息放入死信队列中。