2014-07-22 26 views
1

在Azure服務總線主題我訂閱的郵件超過1000條。這些消息由工作者角色使用。 爲了監控目的,我想先查看10條消息,看看有哪些類型的消息正在等待處理。爲了完成這個任務,我創建了一個訂閱客戶端,並且我調用方法PeekBatchAsync。奇怪的行爲是,有時PeekBatchAsync返回少於10條消息(即2條或4條消息)。Azure服務總線 - PeekBatchAsync返回的郵件數少於預期

代碼示例:

Dim subscriptionClient As SubscriptionClient = messagingFactory.CreateSubscriptionClient(topicName, subscriptionName) 
Dim messages = Await subscriptionClient.PeekBatchAsync(10) 

更多信息予以澄清背景:

  • 我相信,認購包含1000級以上的消息
  • 主題與EnablePartitioning =真
  • 創建
  • 我使用圖書館Microsoft.ServiceBus訴2.3.4.0
  • 我使用會話
  • 大部分時間我得到正確的消息數(10),有時我得到的消息較少。我不知道有什麼確切的條件來複制問題

我的問題是:爲什麼有時該方法返回比預期更少的消息?

回答

1

我猜Azure-ServiceBus ReceiveBatch-method的文檔也適用於PeekBatchAsync的情況。基本上它說:最大。消息的數量(在你的情況10)可能會返回,但不能保證。 (int messageCount, TimeSpan serverWaitTime),其中一個可以定義等待時間:

我施加過載接受兩個參數時經歷更好的結果。

+1

不幸的是,PeekBatch/PeekBatchAsync沒有時間跨度參數的重載,所以我不能嘗試。也許PeekBatch/PeekBatchAsync的文檔應該更新,因爲即使訂閱包含更多元素,元素的數量也不能保證。 – Daniele

+0

@Daniele:即使我使用'TimeSpan'獲得了更好的結果,但我仍然收到的消息少於指定的時間。此外,默認情況下不保證消息的順序! – participant