Service Fabric集群。全面服务。 Service Bus队列使用情况

时间:2017-05-09 21:44:39

标签: c# azure-service-fabric azure-servicebus-queues

完全披露:我是Service Fabric开发的新手。这是我的情况。我们有Service Fabric Cluster。我们在那里部署了有状态服务。服务已指定它侦听的服务总线队列。因此,群集中所有节点上的所有服务实例都会侦听相同的Service Bus队列。每个服务实例都使用Service Bus队列调用OnMessage回调来处理这样的消息:

  QueueClient Queue = QueueClient.CreateFromConnectionString(
                                 GetServicebusConnectionString(), 
                                 ConfigData.SERVICE_QUEUE_NAME);
   if (Queue != null)
   {
       var options = new OnMessageOptions();
       options.AutoComplete = false;

       Queue.OnMessage((receivedMessage) => 
                          ProcessMessage(receivedMessage), options);
   }

现在,根据日志中的消息,看起来所有服务实例都会收到消息,该消息已同时放入队列中。哪个不构成好事。 问题是:

  

当队列中的每条消息只被一个服务实例接收时,是否可以使用Service Bus队列?

1 个答案:

答案 0 :(得分:1)

队列客户端的默认receive mode PeekLock ,并且您将自动完成属性设置为false,这在客户端收到消息后不会自动删除消息信息。锁定到期后,该消息将再次可用,其他服务实例可以再次接收和处理它。

  

是否可以以某种方式使用Service Bus队列,此时队列中的每条消息只能由一个服务实例获取?

您可以将AutoComplete属性设置为true,或在客户端收到并处理该消息后调用Complete method

Queue.OnMessage((receivedMessage) =>
                { ProcessMessage(receivedMessage); receivedMessage.Complete(); }, options);