C# azure服务总线主题订阅上的锁定持续时间重要性

C# azure服务总线主题订阅上的锁定持续时间重要性,c#,azure,azureservicebus,azure-servicebus-topics,C#,Azure,Azureservicebus,Azure Servicebus Topics,我一直在研究服务总线队列和主题的锁定持续时间和续订锁定机制。然而,对于主题订阅来说,锁定持续时间究竟意味着什么还不清楚 例如: 如果我有一个主题GameScoreUpdate,并且它有多个订阅者 因此,与此主题相关的任何消息都将传递给所有订阅者 现在如果在一个订阅“Subscription1”上,我有一个30秒的锁定持续时间。但是消息处理没有完成。那么锁过期了吗 这之后会发生什么?其他订户已收到此邮件。当前订户正在处理消息 在这种情况下,锁定持续时间的意义是什么?将每个订阅视为一个“收件箱”。每

我一直在研究服务总线队列和主题的锁定持续时间和续订锁定机制。然而,对于主题订阅来说,锁定持续时间究竟意味着什么还不清楚

例如:

如果我有一个主题GameScoreUpdate,并且它有多个订阅者

因此,与此主题相关的任何消息都将传递给所有订阅者

现在如果在一个订阅“Subscription1”上,我有一个30秒的锁定持续时间。但是消息处理没有完成。那么锁过期了吗

这之后会发生什么?其他订户已收到此邮件。当前订户正在处理消息


在这种情况下,锁定持续时间的意义是什么?

将每个订阅视为一个“收件箱”。每个订户都有一个。消息会发送给所有订阅者,但实际上,它是放置在每个“收件箱”中的消息的克隆,假设它具有匹配条件

当给定订户尝试使用
PeekLock
模式处理来自“收件箱”的邮件时,该邮件被标记为不可见。如果在
LockDuration
时间内处理邮件失败,邮件将重新出现在“收件箱”中,并将尝试再次处理。直到
MaxDeliveryCount
尝试用尽。在这种情况下,消息将是死信

这是竞争对手真正需要的。也就是说,当您的订户(查看给定订阅/收件箱的流程)被扩展以处理更多邮件时

在这种情况下,锁定持续时间的意义是什么


LockDuration
指示队列(订阅毕竟是一个队列)保持消息对竞争消费者不可见,以确保当前处理节点能够在
LockDuration
定义的时间范围内处理它。续订锁定机制可确保扩展当前正在处理的消息上的锁定,以允许超过
锁定持续时间
处理时间(如果需要)。重要的一点是要记住,锁续订不能保证成功。

当我的订户从1个实例扩展到2个实例时,这不意味着他们是两个不同的客户机/订户吗?那么我们的订户数量和实例数量基本相同?如果我的队列默认配置了5分钟的锁定持续时间。那么这就是它所能拥有的最大值,我将永远不需要使用renewlock方法,对吗?因为最大锁定持续时间可以是5分钟。如果我理解正确的话,当一个逻辑订阅服务器被扩展时,您仍然拥有相同的逻辑订阅服务器,只是在同一队列上有多个实例充当竞争消费者。不同的逻辑订阅服务器具有不同的ASB订阅。LockDuration(5分钟或更短)意味着在操作消息(完成、DLQed、放弃等)或锁过期之前,任何实例都不会抓取消息。如果您的处理在5分钟内完成,其他人将不会触摸它,您将不需要更换锁。如果处理时间超过5分钟,则需要续订。但这并不能保证。