锁定 Azure 服务总线主题订阅的持续时间重要性



我一直在研究服务总线队列和主题的锁定持续时间和续订机制。但是,目前尚不清楚锁定持续时间对主题订阅的确切含义。

例如:

如果我有一个主题 游戏分数更新 并且它有多个订阅者。

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

现在,如果在一个订阅"订阅 1"上,我的锁定持续时间为 30 秒。 但是消息处理未完成。那么锁会过期吗?

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

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

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

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

这对于竞争的消费者来说确实是需要的。 即,当您的订阅者(查看给定订阅/"收件箱"的进程)被扩展以处理大量消息时。

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

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

最新更新