【发布时间】:2021-01-22 14:10:04
【问题描述】:
试图确定窥视锁在服务总线中的工作原理时,我感到有些困惑。特别是我将 Microsoft.Azure.ServiceBus 与 Azure Functions 和 ServiceBusTrigger 一起使用。
据我所知,消息被锁定的时间是在队列本身上设置的,默认为 30 秒,尽管它可以设置为最长 5 分钟。
当从队列中窥视消息时,此锁启动。
然后在 Extensions:ServiceBus:messageHandlerOptions 下的 host.json 文件中设置了一个名为 maxAutoRenewDuration 的设置。这允许客户端自动请求一个或多个锁的扩展,直到达到 maxAutoRenewDuration。一旦达到此限制,将不会请求续订,锁定将被释放。
续订是尽力而为,无法保证,因此理想情况下,您可以尝试设计一种通常在队列上指定的锁定期限内处理消息的设计。
到目前为止我做对了吗?
我还有问题
- 是否存在 maxAutoRenewDuration 可以设置的限制。我读过的一篇文章似乎暗示这可以设置为我需要确保我的消息得到处理的任何内容 (link)。但 Microsoft 文档指出,此最大值也限制为 5 分钟 (link)。
maxAutoRenewDuration 可在 host.json 中配置,映射到 OnMessageOptions.MaxAutoRenewDuration。根据服务总线文档,此设置允许的最大值为 5 分钟
哪个是正确的?我知道默认锁定持续时间最长为 5 分钟,但这似乎也适用于 maxAutoRenewDuration 似乎没有意义?
-
我在一些文章(例如link)中读到了一个名为 MaxLockDuration 的设置。这只是指在队列本身上设置的锁定持续时间吗?
-
我还有什么遗漏吗?队列中设置的锁定持续时间和代码中的 maxAutoRenewDuration 是否是我在处理锁定和续订时需要考虑的主要事项?
谢谢
艾伦
【问题讨论】:
-
谢谢@krishg。正是肖恩在我上面链接的帖子中使用了“MaxLockDuration”,这就是我提出上述问题 2 的原因。在阅读了您提供的链接后,我仍然不清楚他是否使用它来引用锁定持续时间,因为它是在队列本身上设置的......?至于上面的问题 1,您的链接没有给出 MaxAutoRenewDuration 可以设置的上限(尽管我觉得他支持我提供的第一个链接 [所以将其设置为您需要的任何内容]而不是报价来自微软文档,它说它被限制为 5 分钟)。
-
我昨天有时间进行了一些测试,我当然可以将 MaxAutoRenewDuration 设置为超过 5 分钟并得到尊重,所以我假设引用的 Microsoft 文档在这一点上是错误的。
-
把答案贴在下面
标签: azure azure-functions azureservicebus azure-servicebus-queues