当前位置: 首页 > 知识库问答 >
问题:

消息锁定和锁更新在Azure服务总线中是如何工作的?

郜谦
2023-03-14

我有点困惑,试图确定如何窥视锁的工作在服务总线。特别是,我使用Microsoft.Azure.ServiceBus和Azure函数以及ServiceBustrigger。

据我所知,消息被锁定的时间设置在队列本身上,默认值为30秒,但也可以设置在任何地方,最多为5分钟。

当从队列中窥视到一条消息时,这个锁就会启动。

我还有的问题是

  1. 是否存在maxAutoRenewDuration可以设置的限制。我读到的一篇文章似乎建议可以将它设置为我需要的任何内容,以确保我的消息被处理(链接)。但Microsoft文档指出,最大值也被限制为5分钟(链接)。

maxAutoRenewDuration可以在host.json中配置,它映射到OnMessageOptions.maxAutoRenewDuration。根据服务总线文档,此设置允许的最大时间为5分钟

阿兰

共有1个答案

金嘉言
2023-03-14

我理解你的困惑。官方文档对maxautorenewduration的解释似乎是错误的。已经有一个打开的文档问题https://github.com/microsoftdocs/azure-docs/issues/62110,还有一个引用https://github.com/azure/azure-functions-host/issues/6500。

要确定您的问题:

  • #1:如上所述,存在打开的单据问题。
  • #2:MaxLockDuration是服务总线队列端设置,它基本上表示,如果您从队列中查看到锁定消息,则该消息在该持续时间内为使用者锁定。因此,除非您在该时间段内完成消息处理或续订锁,否则锁将过期。
  • #3:@Sean-Feldman在https://stackoverflow.com/a/60381046/13791953线程中的精彩解释应该能回答这个问题。
 类似资料:
  • 我在Azure服务总线中构建了一个支持多队列订阅的服务,但是我正在得到一些奇怪的行为。 我的subscription singleton类有一个如下所示的方法: 其思想是,您为特定类型的消息订阅Azure Service Bus,该消息直接对应于队列。在订阅中,传入一个委托以了解如何处理消息。 谁能告诉我,我需要做什么不同的,以确保消费者拥有的消息,直到完成?

  • 我正在开发一个Azure逻辑应用,其中有一个服务总线窥视锁触发器。服务总线的消息锁定持续时间为5分钟。我希望每5分钟有一个自动更新令牌机制,以防逻辑应用实例需要超过5分钟,以便该过程可以继续,而无需释放锁,让另一个消费者将消息带走。 有什么方法可以通过Logic应用程序实现这一点吗?

  • 我正在使用azure服务总线,我得到的锁已过期。 如何我已经实现了锁定1天,但我仍然得到错误 我的代码: 错误: ---日志记录错误---回溯(最近一次通话最后一次): 文件“/test/.env/lib64/python3.6/site packages/azure/servicebus/_servicebus_receiver.py”,第782行,在放弃消息self中_在第415行,用重试(消

  • 通过使用Azure服务总线主题和订阅,我能够在两个系统之间传递消息。但有时,我会遇到锁过期的异常。如何避免? 异常-消息处理程序遇到异常Microsoft.Azure.ServiceBus.MessageLockLostException:提供的锁无效。锁定过期,或者消息已从队列中删除。 下面是代码:

  • 我有一个windows服务,它侦听Azure服务总线队列消息,以便从我的WebApi应用程序分发处理。此外,我还需要处理重复性任务(每晚/每周),我认为最好使用相同的系统来处理这些任务。 例如,假设我有一个“CleanupDb”队列,每天午夜删除过时的DB节点: 理论上这应该行得通,但我觉得我错过了一个更明显的处理方法。有没有更好的办法?

  • 我正在尝试在Azure中构建一个简单的WebAPI REST服务,后端有一个服务总线队列工作器。我可以从Web API向工作人员发送一条消息。然而,我试图发送更多的信息,只是为了看看一切是如何运作的。因此,我创建了一个简单的控制器,如下所示: 当我呼叫控制器时,我只收到工作人员接收到的大约1/2的消息。其余的似乎都被放弃了。