2013-11-22 67 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.