我有几个客户端应用程序正在等待从Azure Service Bus队列中删除消息作业。
一旦客户有了这份工作,我就不希望任何其他客户申请人接受这份工作。
如果所有客户端都实施Queue.OnMessage()以通知到达消息,我怎样才能确定2个或更多客户端不接收消息?
答案 0 :(得分:1)
我的理解是,只要其中一名工作人员从队列中获得了一个项目,就会在某个可配置的时间(租约)内对其他人不可见。如果工作人员成功完成了该作业,则会通知队列该项目可以被删除。如果工作人员失败,它可以通知队列将项目移动到死信队列,如果工人死亡,该项目在其他工作人员的租约时间后变为可见。项目中应该有一个属性(由ServiceBus设置),表示项目的交付次数。还有一个TTL(生存时间),之后项目将自动移动到死信队列。
答案 1 :(得分:0)
为了避免使用队列,您可以使用Azure Service Bus的会话功能。
首先需要创建一个会话感知队列,然后才能执行其他任务,这可以按照以下步骤完成。
SessionId
设置会话感知队列后,您必须为消息设置MessageSession
属性,并使用QueueClient
而不是=WARNING REPORT==== 7-Apr-2016::10:40:50 ===
closing AMQP connection <0.32373.9> (192.168.55.1:55716 -> 192.168.55.100:5672):
connection_closed_abruptly
接收消息。
可以找到一些代码示例: Sending Messages,Receiving Messages。