1

在我的系统中 LockDuration = 5 分钟,AutoRenewTimeout = 20 分钟。处理某些消息需要超过 5 分钟(有时 5:15,有时超过 6:00)。对于这些消息,我有一个例外:

"The lock supplied is invalid. Either the lock expired, or the message has already been removed from the queue."

我在我们的日志中读到,系统开始处理一条消息(我们称之为 Process_A),它仍在进行中,5 分钟后,系统再次开始处理同一条消息(我们称之为 Process_B)。Process_A 完成并调用 Complete()。然后 Process_B 完成工作并调用 Complete()。它会导致异常,因为此消息已被编译。

我在文档中发现 LockDuration 的最大值是 5 分钟。为什么?超过 5 分钟的消息无法处理?或者可能配置错误?

4

1 回答 1

1

解决方案是更新消息的锁定,以防处理消息的时间超过最大锁定持续时间。如果您使用的是 Azure Service Bus .Net SDK,则您要调用的方法是RenewMessageLock传入您在获取消息时收到的锁 ID。

您可能还会发现这篇博文很有帮助:http: //vunvulearadu.blogspot.in/2015/09/azure-service-bus-how-to-extend-lock-of.html

于 2017-04-12T10:45:39.483 回答