【问题标题】:How does message locking and lock renewal work in Azure Service Bus?Azure 服务总线中的消息锁定和锁定续订如何工作?
【发布时间】:2021-01-22 14:10:04
【问题描述】:

试图确定窥视锁在服务总线中的工作原理时,我感到有些困惑。特别是我将 Microsoft.Azure.ServiceBus 与 Azure Functions 和 ServiceBusTrigger 一起使用。

据我所知,消息被锁定的时间是在队列本身上设置的,默认为 30 秒,尽管它可以设置为最长 5 分钟。

当从队列中窥视消息时,此锁启动。

然后在 Extensions:ServiceBus:messageHandlerOptions 下的 host.json 文件中设置了一个名为 maxAutoRenewDuration 的设置。这允许客户端自动请求一个或多个锁的扩展,直到达到 maxAutoRenewDuration。一旦达到此限制,将不会请求续订,锁定将被释放。

续订是尽力而为,无法保证,因此理想情况下,您可以尝试设计一种通常在队列上指定的锁定期限内处理消息的设计。

到目前为止我做对了吗?

我还有问题

  1. 是否存在 maxAutoRenewDuration 可以设置的限制。我读过的一篇文章似乎暗示这可以设置为我需要确保我的消息得到处理的任何内容 (link)。但 Microsoft 文档指出,此最大值也限制为 5 分钟 (link)。

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

哪个是正确的?我知道默认锁定持续时间最长为 5 分钟,但这似乎也适用于 maxAutoRenewDuration 似乎没有意义?

  1. 我在一些文章(例如link)中读到了一个名为 MaxLockDuration 的设置。这只是指在队列本身上设置的锁定持续时间吗?

  2. 我还有什么遗漏吗?队列中设置的锁定持续时间和代码中的 maxAutoRenewDuration 是否是我在处理锁定和续订时需要考虑的主要事项?

谢谢

艾伦

【问题讨论】:

  • 谢谢@krishg。正是肖恩在我上面链接的帖子中使用了“MaxLockDuration”,这就是我提出上述问题 2 的原因。在阅读了您提供的链接后,我仍然不清楚他是否使用它来引用锁定持续时间,因为它是在队列本身上设置的......?至于上面的问题 1,您的链接没有给出 MaxAutoRenewDuration 可以设置的上限(尽管我觉得他支持我提供的第一个链接 [所以将其设置为您需要的任何内容]而不是报价来自微软文档,它说它被限制为 5 分钟)。
  • 我昨天有时间进行了一些测试,我当然可以将 MaxAutoRenewDuration 设置为超过 5 分钟并得到尊重,所以我假设引用的 Microsoft 文档在这一点上是错误的。
  • 把答案贴在下面

标签: azure azure-functions azureservicebus azure-servicebus-queues


【解决方案1】:

我理解你的困惑。 maxAutoRenewDurationofficial doc 解释似乎是错误的。已经有一个开放的文档问题https://github.com/MicrosoftDocs/azure-docs/issues/62110 和一个参考https://github.com/Azure/azure-functions-host/issues/6500

确定您的问题:

  • #1:如上所述,存在 open doc 问题。
  • #2:MaxLockDuration 是服务总线队列端设置,基本上表示如果您从队列中窥视锁定一条消息,则该消息在该持续时间内为消费者锁定。因此,除非您在该期限内完成消息处理或更新锁定,否则锁定将会过期。
  • #3:@sean-feldman 在线程 https://stackoverflow.com/a/60381046/13791953 中的精彩解释应该会回答这个问题。

它所做的是与代理延长消息租约,为当前正在处理消息的竞争消费者“重新锁定”它。 MaxAutoRenewDuration 应设置为“可能需要租约的最长处理时间”。

【讨论】:

  • 谢谢你,这一切都很好。在测试之后,我还打开了一个关于文档的 Github 问题。我将使用您提供的问题的链接对其进行更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 2021-04-03
相关资源
最近更新 更多