【问题标题】:Azure Service bus: Multiple clients but only one message processed at a timeAzure 服务总线:多个客户端,但一次只处理一条消息
【发布时间】:2014-03-12 08:28:58
【问题描述】:

我正在尝试评估 Azure 服务总线是否符合我的要求。

我需要能够让多个客户端监听消息,但我想确保在任何给定时间只有一个客户端可以处理消息。因此,当我想在处理消息时锁定整个队列以进行读取时,实际上是这样。 (该消息基本上是启动一些数据库聚合作业的信号)

所以如果消息 A 到达并且客户端 1 开始处理它,那么如果消息 B 到达,我不希望客户端 2 开始处理它,除非客户端 1 已经完成。

我意识到我可以通过只让 1 个客户收听来实现这一点。 我的另一个选择是查看实例 id,并且仅在实例 id = 0 时启动侦听器,但我想知道是否有办法避免这种实例 id 特定的逻辑。

【问题讨论】:

    标签: servicebus


    【解决方案1】:

    您可以使用服务总线队列上的会话来实现此目的。从发件人的角度来看,您可以在每条消息上添加一个字符串 SessionId 属性并指定它们属于哪个会话。在接收方,您调用 AcceptMessageSession 并基本上锁定整个会话。稍后显示在该会话中的任何消息将仅传递给他们调用 Receive 锁定会话的接收者。其他客户端也可以在队列上调用 AcceptMessageSession,但如果所有消息都发送到单个会话(都具有相同的 sessionid),那么只有一个接收者会看到它。此处提供了使用会话的示例: http://code.msdn.microsoft.com/windowsazure/Brokered-Messaging-Session-41c43fb4

    您所描述的场景的目的尚不清楚,因此请查看 Azure 存储 Blob 租约等,因为它们可能会解决您需要的相同锁定语义。

    【讨论】:

    • 太棒了。这听起来正是我需要的。
    猜你喜欢
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多