我的应用程序订阅了 Azure 服务总线主题。当服务收到消息时我会进行一些处理,当处理时间很小时它会按预期工作。但当需要很长时间时,我的服务开始多次接收相同的消息。
异常类型:Azure.Messaging.ServiceBus.ServiceBusException
异常消息:提供的锁无效。锁已过期,或者消息已从队列中删除。有关更多信息,请参阅 https://aka.ms/ServiceBusExceptions 。天蓝色(消息锁丢失)
在此应用中
MaxAutoRenewDuration
的值为2。所以我认为,如果需要更多时间,它会再次收到相同的信息。应用程序中的 prefetchCount
值为 0。我读过一些文章,了解到如果我增加MaxAutoRenewDuration
的值,可能会解决问题。但我又想知道它的优点和缺点。
我还有一个有趣的观察,我已经添加了关于这个主题的测试订阅,但是这个测试订阅仍然只显示该消息的一条消息,但是我的接收应用程序正在接收多条消息,那么它是如何工作的?
您的场景中需要考虑两个设置。
MaxAutoRenewDuration
LockDuration
LockDuration
是在您收到的实体上定义的。它应该总是小于小于MaxAutoRenewDuration
。因此,如果处理时间最多需要 5 分钟,但可能会飙升至 7 分钟,您应该将 LockDuration
设置为最长 5 分钟,并将 MaxAutoRenewDuration
设置为大于 7 的值。