Azure服务总线:多个客户端,但一次只处理一条消息



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

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

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

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

您可以使用服务总线队列上的会话来实现这一点。从发送方的角度来看,您可以在每个消息上添加一个字符串SessionId属性,并指定它们属于哪个会话。在接收方端,你调用acceptmessagessession并锁定整个会话。稍后为该会话出现的任何消息将仅通过调用Receive传递给已锁定会话的接收者。其他客户端也可以在队列上调用acceptmessagessession,但如果所有消息都要进入单个会话(所有消息都具有相同的sessionid),那么只有一个接收方会看到它。这里有一个使用会话的示例:http://code.msdn.microsoft.com/windowsazure/Brokered-Messaging-Session-41c43fb4

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

最新更新