我一直在研究服务总线队列和主题的锁定持续时间和更新锁定机制。然而,目前尚不清楚锁定持续时间对于主题订阅到底意味着什么。
例如:
如果我有一个主题 GameScoreUpdate 并且它有多个订阅者。
因此,此主题的任何消息都将传递给所有订阅者。
现在,如果在一个订阅“Subscription1”上,我的锁定持续时间为 30 秒。但是消息处理还没有完成。那么锁就过期了吗?
此后会发生什么?其他订阅者已经收到此消息。当前订阅者正在处理该消息。
在这种情况下,锁定持续时间有何意义?
将每个订阅视为一个“收件箱”。每个订阅者都会得到一个。消息会发送给所有订阅者,但实际上,它是放置在每个“收件箱”中的消息的克隆,假设它具有匹配条件。
当给定订阅者尝试使用以下方式处理来自“收件箱”的消息时PeekLock
模式下,消息被标记为不可见。如果处理消息失败LockDuration
过了一段时间,该邮件将重新出现在“收件箱”中,并将再次尝试进行处理。直到MaxDeliveryCount
尝试已经用尽。在这种情况下,消息将成为死信。
这对于竞争的消费者来说确实是需要的。 IE。当您的订阅者(查看给定订阅/“收件箱”的进程)被扩展以处理大量消息时。
在这种情况下,锁定持续时间有何意义?
LockDuration
指示队列(订阅毕竟是一个队列)保持消息对竞争消费者不可见,以确保当前处理节点可以在定义的时间范围内处理它LockDuration
。更新锁机制确保当前正在处理的消息上的锁是extended允许长于LockDuration
如果需要的话,处理时间。重要的是要记住,锁更新是not保证成功。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)