有人可以提供有关使用Azure Service Bus OnMessageOptions.AutoRenewTimeout的更多指导 http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.onmessageoptions.autorenewtimeout.aspx
因为我没有找到关于此选项的大量文档,并且想知道这是否是更新消息锁的正确方法
我的用例:
1)消息处理队列的锁定持续时间为5分钟(允许的最大值)
2)消息处理器使用OnMessageAsync消息泵从队列中读取(使用ReceiveMode.PeekLock)长时间运行的处理可能需要10分钟才能处理消息,然后再手动调用msg.CompleteAsync
3)我希望消息处理器自动更新它的锁定,直到预期完成处理的时间(~10分钟).如果在此期间之后尚未完成,则应自动释放锁定.
谢谢
- 更新
我从来没有最终获得有关AutoRenewTimeout的更多指导.我最终使用自定义MessageLock类,根据计时器自动更新消息锁.
请参阅要点 - https://gist.github.com/Soopster/dd0fbd754a65fc5edfa9
因此,我试图了解服务总线的时间安排...特别是锁如何工作。我们可以选择手动调用CompleteAsync。处理也可能需要一些时间。在这些情况下,我们要确保我们不会不必要MessageLockLostException。
似乎有几个数字与之相关:
假设处理运行了大约2分钟,然后成功或失败(暂时不影响哪种情况)。假设这是正常情况,因此这意味着处理每条消息大约需要2分钟。
此外,这确实是一个队列,而不是主题。而我们只有一个消费者认为asynchronoulsy流程与信息MaxConcurrentCalls设置为100。我们正在使用的OnMessageAsync有ReceiveMode.PeekLock。
现在,我的设置应该是一个单一的使用者,以可靠地处理所有消息?
我认为将Lock的持续时间设置为1分钟就可以了,因为这是默认设置,为了安全起见,我将AutoRenewTimeout设置为5分钟,因为据我所知,该值应该是处理消息所需的最长时间(根据此答案至少)。性能对于这个系统不是很关键,所以我很共鸣,因为只要我们没有收到LockedException,就可以将消息锁定一些不必要的1分钟,2分钟或3分钟并不是一件坏事,因为这些没有任何实际价值。