【发布时间】:2019-03-21 18:26:26
【问题描述】:
我正在使用多个消费者,以便使用 ReceiveMode.PeekLock 从队列接收消息。当我与一个消费者锁定消息但未完成消息接收以便从队列中删除时,其他消费者无权访问它。
我的问题是,当其他消息被锁定且尚未从队列中删除时,其他消费者是否可以访问其他消息,或者他们是否被阻止尝试出队并从该队列接收任何其他消息?
【问题讨论】:
标签: azureservicebus servicebus
我正在使用多个消费者,以便使用 ReceiveMode.PeekLock 从队列接收消息。当我与一个消费者锁定消息但未完成消息接收以便从队列中删除时,其他消费者无权访问它。
我的问题是,当其他消息被锁定且尚未从队列中删除时,其他消费者是否可以访问其他消息,或者他们是否被阻止尝试出队并从该队列接收任何其他消息?
【问题讨论】:
标签: azureservicebus servicebus
是的,消费者确实可以访问队列中的其他消息,而不是锁定的消息。
否则基于队列消息的缩放将无济于事,因为其他消费者将等待第一条消息被处理,之后每个人都在等待的消费者将能够接收下一条消息......
来自Peek-Lock Message (Non-Destructive Read)
此操作以原子方式从队列或订阅中检索并锁定消息以进行处理。 保证在队列/订阅描述中指定的锁定持续时间内,消息不会传递给其他接收者(仅在同一队列或订阅上)。当锁过期时,消息对其他接收者可用。为了完成消息的处理,接收者应该使用从该操作中接收到的锁 ID 发出删除命令。要放弃对消息的处理并为其他接收者解锁,应发出解锁消息命令,否则锁定持续时间可能到期。
【讨论】: