我一直在研究服务总线队列和主题的锁定和续订机制。但是,目前尚不清楚锁定持续时间究竟对主题订阅的意义。
例如:
如果我有一个主题GameScoreUpdate,它有多个订阅者。
因此,本主题的任何消息都将发送给所有订阅者。
现在如果在一个订阅“Subscription1”上,我的锁定持续时间为30秒。但是消息处理还没有完成。那么锁定到期了吗?
此后会发生什么?其他订阅者已经收到此消息。当前用户正在处理该消息。
在这种情况下,锁定的重要性是什么?
答案 0 :(得分:8)
将每个订阅视为"收件箱"。每个订户获得一个。消息将发送给所有订阅者,但实际上,它是放置在每个"收件箱中的消息的克隆,假定它具有匹配条件。
当给定订户尝试处理来自"收件箱的消息时#34;使用PeekLock
模式,邮件被标记为不可见。如果在LockDuration
时间内未能处理该邮件,该邮件将重新显示在"收件箱中#34;并将再次尝试处理。在MaxDeliveryCount
尝试用尽之前。在这种情况下,消息将是无效的。
竞争消费者确实需要这样做。即当您的订阅者(查看给定订阅/"收件箱"的过程)被扩展出来以处理更多数量的消息时。
在这种情况下,锁定的重要性是什么?
LockDuration
指示队列(毕竟订阅是一个队列),以使消息对于竞争消费者不可见,以确保当前处理节点可以使用LockDuration
定义的时间范围来处理它。更新锁定机制可确保当前正在处理的消息的锁定扩展,以便在需要时允许超过LockDuration
处理时间。重要的是要记住,锁定续订不保证成功。