相关疑难解决方法(0)

指导OnMessageOptions.AutoRenewTimeout

有人可以提供有关使用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

azure azureservicebus azure-servicebus-queues

14
推荐指数
2
解决办法
3647
查看次数

自动自动更新Azure Service Bus上的锁定

因此,我试图了解服务总线的时间安排...特别是锁如何工作。我们可以选择手动调用CompleteAsync。处理也可能需要一些时间。在这些情况下,我们要确保我们不会不必要MessageLockLostException

似乎有几个数字与之相关:

  • 锁定持续时间(在总线上的天蓝色门户中找到,当前设置为1分钟,这是默认设置)
  • AutoRenewTimeout(OnMessageOptions的属性,当前设置为1分钟)
  • 自动完成(OnMessageOptions的属性,当前设置为false)

假设处理运行了大约2分钟,然后成功或失败(暂时不影响哪种情况)。假设这是正常情况,因此这意味着处理每条消息大约需要2分钟。

此外,这确实是一个队列,而不是主题。而我们只有一个消费者认为asynchronoulsy流程与信息MaxConcurrentCalls设置为100。我们正在使用的OnMessageAsyncReceiveMode.PeekLock

现在,我的设置应该是一个单一的使用者,以可靠地处理所有消息?

我认为将Lock的持续时间设置为1分钟就可以了,因为这是默认设置,为了安全起见,我将AutoRenewTimeout设置为5分钟,因为据我所知,该值应该是处理消息所需的最长时间(根据此答案至少)。性能对于这个系统不是很关键,所以我很共鸣,因为只要我们没有收到LockedException,就可以将消息锁定一些不必要的1分钟,2分钟或3分钟并不是一件坏事,因为这些没有任何实际价值。

该线程该线程提供了如何手动更新锁的绝佳示例,但我认为有一种自动更新锁的方法。

azure azureservicebus

2
推荐指数
1
解决办法
2355
查看次数