4

我正在使用Azure服務總線來管理帶有捲動和workerrole的消息。從無隊列的隊列接收多條消息

我需要知道如何從一次隊列中獲取多條消息而不使用循環。

+0

爲什麼你需要這樣做沒有循環? – Frans

+0

例如,我希望每次調用函數 – GoodSpeed

+0

時都收到10條消息,但是爲什麼?你不能只循環10次,每次讀一條消息嗎? – Frans

回答

4

服務總線隊列沒有同時檢索多個消息的方式,但你可以設置了預取,這裏的消息將被緩存(導致更快的性能)。有關預取的更多信息here

如果您確實需要批量讀取消息,請考慮@AvkashChauhan指出的內容:Windows Azure存儲隊列最多支持32條消息,以便在單個事務中一次讀取。您需要單獨刪除每個隊列消息;沒有批量刪除。

2

當從隊列中檢索消息時,在單個存儲事務中將多個消息一起批量處理。隊列服務API中的GetMessages方法允許在單個事務中取消排隊指定數量的消息

當通過GetMessages方法檢索消息時,隊列服務API在單個出列操作中支持的最大批處理大小限於超過此限制將導致運行時異常。

訪問此處瞭解詳情:http://windowsazurecat.com/2010/12/best-practices-for-maximizing-scalability-and-cost-effectiveness-of-queue-based-messaging-solutions-on-windows-azure/

+1

我想OP是詢問服務總線隊列,而不是Windows Azure存儲隊列。 –

+0

但是+1,因爲它是從隊列中大量讀取消息的唯一方法。 –

4

您可以使用Microsoft.ServiceBus.Messaging的ReceiveBatch方法:

private MessageReceiver messageReceiver; 
var brokeredMessagesList = messageReceiver.ReceiveBatch(100); 

你可以把一個鎖隊列中,直到接收到一批加工完成,你與你的處理完成後,你可以調用CompleteBatch來釋放隊列上的鎖定:

   List<Guid> messageLockTokenList = new List<System.Guid>(); 
       foreach(BrokeredMessage message in brokeredMessagesList) 
       { 
        messageLockTokenList.Add(message.LockToken); 
       } 
       messageReceiver.CompleteBatch(messageLockTokenList)