2013-11-22 35 views
1

我有一个JavaScript日志实用程序,可以将请求批量发送到我的服务器,然后将它们转发给队列客户端(Microsoft.ServiceBus.Messaging.QueueClient)。我想将它们异步发送到ServiceBus,并且仍然按照它们放入我发送的批次中的顺序进行处理。 SendBatchAsync的文档显示该方法用于“批量”处理。这让我想我可以发送一批请求并将它们作为一个单元处理(即:按顺序)。虽然,看起来这些消息正在乱序处理。我正在使用OnMessage来接收消息;我不确定这是一个限制还是我错过了什么?Microsoft ServiceBus接收中断消息

我得到异步不保证顺序与其他异步请求,但这是一个单一的请求。我不想在响应javascript客户端之前等待响应,因为我只是试图发送它们,但我仍然需要确保它们保持顺序,因为它们是顺序事件。

这里是我怎么把它们发送到队列:

MyQueueClient.SendBatchAsync(MyListOfBrokerMessages); 

然后我处理它们:

 ServiceBus.TrackerClient.OnMessage((m) => 
     { 
      try 
      { 
       ProcessMessage(m); 
      } 

我没有得到批量处理的点,如果它不处理作为一个批次,除了可能提出一个请求。必须有一些方法来发送批处理,并按顺序处理?

编辑: 我使用Send代替SendBatchAsync试过,我已经设置MaxConcurrentCalls为1,但消息仍然不正常。

回答

1

你可以做的是在这里使用会话,

  1. 设置相同的sessions id在批量
  2. 所有的邮件接收方,AcceptMessageSession()会给你一个会话
  3. 呼叫收到关于会议(ReceiveBatch)。本次会话将为您提供该批次中的所有消息。
+0

去玩弄这一点,并尽快给您:)编码样本。谢谢! – KingOfHypocrites

3

MSDN:

的SessionID摘自:如果消息具有 Microsoft.ServiceBus.Messaging.BrokeredMessage.SessionId属性集,则服务总线 使用SessionId属性作为分区键。这样,属于同一个会话的所有消息都由相同的消息代理处理。这使服务总线能够保证消息顺序以及会话状态的一致性。

对于采用SessionIdAcceptSessionReceiversee.