为什么BrokeredMessage.renewlock()仅续签锁几秒钟



我有一个BrokeredMessageContext类,该类使用计时器定期检查和续订BrokeredMessage实例上的锁,以防处理此消息的过程比预期更长的过程。它通过在BrokeredMessage实例上调用Renewlock()方法来更新锁。

我希望这个电话给我一个与原始锁相同超时的新锁(MSDN指出:"您可以续订与Entity Lock Timeout相同的锁,并且锁定锁定持续时间没有最大持续时间。我已经在BrokeredMessage实例上设置了一张手表,我可以看到Lockeduntilutc Propery每次致电Renewlock()。

有人知道为什么是这种情况吗?可以采取任何措施以更长的时间续订锁吗?

编辑:

Mike的答案在下面是正确的。我发现我实际上是在试图从Start 开始每隔十秒钟续订一次锁,即使我的代码旨在在锁定到期之前的二十秒之前续签锁。这一切都归结为时间比较问题,以及我的机器上的时间是错误的(已经近一分钟了)。D'OH!

呼叫renewlock时,它会重置消息在队列上的锁定设置或订阅中锁定消息的时间。如果您正在执行续订的班级的计时器每10-15秒发射一次,那么您看到的行为是正确的。

示例:我有一个队列,锁定持续时间为1分钟(默认)。
我在UTC上午1:20拉消息,因此Lockeduntilutc应该阅读1:21 AM UTC。如果在处理过程中10秒钟,我将续订锁定在上午1:20:10锁定呼叫大火,因此Lockeduntilutc将变为1:21.10 AM。

它将锁定持续时间值添加到服务器上的当前时间,而不是以前的lockeduntilutc值。这会延长您在消息上的锁定周期。

此答案假定您经常在计时器上触发扳机,而不是等待接近实际的锁定超时。如果您想更加精确,则可以将计时器设置为在设置锁定之前约10-20秒发射约10-20秒,然后进行更新锁定。

最新更新