我正在通过Azure ServiceBus使用Azure .net队列。OnMessageHandler/OnMessageOptions上有一个名为"AutoRenewTimeout“的标志,但是对于这个值的实际含义似乎存在混淆。
在这里的正式文档中,https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.onmessageoptions.aspx建议AutoRenewTimeout应该大于队列锁定持续时间。
获取或设置自动更新锁的最大持续时间。此值应大于最长的消息锁定持续时间;例如,LockDuration属性。
这似乎表明,AutoRenewTimeout或多或少是处理消息所需的最大时间。例如,如果您的锁定持续时间为1分钟,并且自动超时时间为5分钟,则在放弃并使其再次在队列中可见之前,消息将被更新5次。还有其他的StackOverflow答案证实了这一点,例如https://stackoverflow.com/a/36051408
要处理长消息处理,您应该设置AutoRenewTimeout == 10分钟(在您的情况下)。这意味着每次LockDuration过期时,锁都会在这10分钟内被更新。 因此,如果您的LockDuration是3分钟,AutoRenewTimeout是10分钟,那么每3分钟的锁就会被自动更新(在3分钟、6分钟和9分钟之后),并且锁将在12分钟后自动释放,因为消息被消耗了。
然而,在更多的研究中,我偶然发现了一条老的推特(https://twitter.com/clemensv/status/649940087267041284),这条推特看起来是微软信息传递的首席架构师。在这条推文中,它似乎认为AutoRenewTimeout是它调用"RenewLock“方法的间隔。
当回调处于活动状态时,在消息上调用https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.renewlock.aspx的时间间隔
因此,例如,如果锁持续时间为1分钟,则AutoRenewTimeout应该是30秒左右,以确保消息锁在释放之前被更新。
在我自己的测试中,我倾向于前者是正确的,但这条推文让我怀疑也许我不知道如何充分利用AutoRenewTimeout
发布于 2016-04-13 05:28:30
你的测试是正确的。
AutoRenewTimeout将允许将处理时间延长到LockDuration w/o以外,从而增加DeliveryCount。应该将其设置为最大处理时间回调。将其读取为等待处理回调完成的时间范围。在此之后,OnMessage API将不再发布更新。
https://stackoverflow.com/questions/36561227
复制相似问题