异常 提供的锁无效。锁定已过期,或者消息已从 Azure 的队列中删除

问题描述 投票:0回答:1

我的应用程序订阅了 Azure 服务总线主题。当服务收到消息时我会进行一些处理,当处理时间很小时它会按预期工作。但当需要很长时间时,我的服务开始多次接收相同的消息。

异常类型:Azure.Messaging.ServiceBus.ServiceBusException

异常消息:提供的锁无效。锁已过期,或者消息已从队列中删除。有关更多信息,请参阅 https://aka.ms/ServiceBusExceptions 。天蓝色(消息锁丢失)

在此应用中

MaxAutoRenewDuration
的值为2。所以我认为,如果需要更多时间,它会再次收到相同的信息。应用程序中的
prefetchCount
值为 0。我读过一些文章,了解到如果我增加
MaxAutoRenewDuration
的值,可能会解决问题。但我又想知道它的优点和缺点。

我还有一个有趣的观察,我已经添加了关于这个主题的测试订阅,但是这个测试订阅仍然只显示该消息的一条消息,但是我的接收应用程序正在接收多条消息,那么它是如何工作的?

azure azureservicebus azure-servicebus-topics azure-servicebus-subscriptions
1个回答
0
投票

您的场景中需要考虑两个设置。

  1. MaxAutoRenewDuration
  2. LockDuration

LockDuration
是在您收到的实体上定义的。它应该总是小于小于
MaxAutoRenewDuration
。因此,如果处理时间最多需要 5 分钟,但可能会飙升至 7 分钟,您应该将
LockDuration
设置为最长 5 分钟,并将
MaxAutoRenewDuration
设置为大于 7 的值。

© www.soinside.com 2019 - 2024. All rights reserved.