单个 Azure 服务总线队列的多个客户端
Multiple clients for single Azure Service Bus queue
我有几个客户端应用程序正在等待从 Azure 服务总线队列中取出消息作业。
一旦客户获得工作,我不希望任何其他客户应用程序接收该工作。
如果所有客户端都实现 Queue.OnMessage() 以收到到达消息的通知,我如何确定 2 个或更多客户端不会接收消息?
我的理解是,一旦你的一名工作人员从队列中拿到一个项目,它就会在一定的可配置时间(租约)内对其他人不可见。如果工作人员成功完成作业,它会通知队列可以删除该项目。如果工作人员失败,它可以通知队列将项目移动到死信队列,如果工作人员死亡,则项目在其他工作人员的租用时间后变得可见。 item中应该有一个属性(由ServiceBus设置)表示一个item被多少次delivered.There也是一个TTL(time to live),过了这个item会自动移动到dead letter排队。
为了避免使用队列,您可以使用 Azure Service Bus.
的会话功能
您需要先创建一个会话感知队列,然后再做任何其他事情,这可以按如下方式完成。
// Create a queue with duplicate detection
// with a detection history window of one hour,
// and requires sessions.
QueueDescription rfidCheckoutQueueDescription = new QueueDescription("rfidcheckout")
{
RequiresSession = true,
RequiresDuplicateDetection = true,
DuplicateDetectionHistoryTimeWindow = new TimeSpan(0, 1, 0)
};
// Create a queue that supports duplicate detection.
namespaceMgr.CreateQueue(rfidCheckoutQueueDescription);
设置会话感知队列后,您必须为消息设置 SessionId
属性 并使用 MessageSession
而不是 QueueClient
接收消息。
为此可以找到一些代码示例:
Sending Messages, Receiving Messages.
我有几个客户端应用程序正在等待从 Azure 服务总线队列中取出消息作业。
一旦客户获得工作,我不希望任何其他客户应用程序接收该工作。
如果所有客户端都实现 Queue.OnMessage() 以收到到达消息的通知,我如何确定 2 个或更多客户端不会接收消息?
我的理解是,一旦你的一名工作人员从队列中拿到一个项目,它就会在一定的可配置时间(租约)内对其他人不可见。如果工作人员成功完成作业,它会通知队列可以删除该项目。如果工作人员失败,它可以通知队列将项目移动到死信队列,如果工作人员死亡,则项目在其他工作人员的租用时间后变得可见。 item中应该有一个属性(由ServiceBus设置)表示一个item被多少次delivered.There也是一个TTL(time to live),过了这个item会自动移动到dead letter排队。
为了避免使用队列,您可以使用 Azure Service Bus.
的会话功能您需要先创建一个会话感知队列,然后再做任何其他事情,这可以按如下方式完成。
// Create a queue with duplicate detection
// with a detection history window of one hour,
// and requires sessions.
QueueDescription rfidCheckoutQueueDescription = new QueueDescription("rfidcheckout")
{
RequiresSession = true,
RequiresDuplicateDetection = true,
DuplicateDetectionHistoryTimeWindow = new TimeSpan(0, 1, 0)
};
// Create a queue that supports duplicate detection.
namespaceMgr.CreateQueue(rfidCheckoutQueueDescription);
设置会话感知队列后,您必须为消息设置 SessionId
属性 并使用 MessageSession
而不是 QueueClient
接收消息。
为此可以找到一些代码示例: Sending Messages, Receiving Messages.