2016-07-15 7 views
0

私は、読んでみたいメッセージのキューを持っています。 3通話が取得する第四の呼び出しに続いて、96件のメッセージを取得する「queue.GetMessages()」について説明する、この場合Azureは全体の待ち行列を "覗く"?

queue.FetchAttributes(); 
      var orderCount = queue.ApproximateMessageCount; 
      while(orderCount > 0) 
      { 
       var messages = queue.GetMessages(32,TimeSpan.FromMinutes(1)); 
       if (messages != null) 
       { 
        foreach (var item in messages) 
        { 
         Order singleOrder = new JavaScriptSerializer().Deserialize<Order>(item.AsString); 
         PendingOrders.Add(singleOrder); 
        } 
       } 
       queue.FetchAttributes(); 
       orderCount = (messages == null) ? 0 : queue.ApproximateMessageCount; 
      } 

:100項目のキューに基づいて、次のコードを考えてみましょう残りの4.ループは終了し、アイテムのリストが返されます。 これを実行すると、同じ項目を何度も持ち上げている、つまり増分していないように見えます。アイテムを読んだときに一時的にキューから削除したという印象を受けましたか?だから私はメッセージを読むたびに、それは私のキューから一時的に削除されます - この場合、1分間。私はステップを逃したのですか? 1分後にアイテムを待ち行列に戻したいので、どこでも「DeQueue」を呼び出すわけではありません。

答えて

0

queue.GetMessagesに電話すると、実際にはキューでDequeueの操作が実行されています。 GetMessages操作では、実際にはメッセージが1分間表示されません。

ただし、メッセージはキューから削除されません。だからに電話すると、ApproximateMessageCountのキューのプロパティは常に同じ番号(100)を返します。従って、PendingOrders.Add(singleOrder);行のコードを実行するのに費やす時間に応じて、同じメッセージを返す可能性があります。 32個のメッセージをループするのに1分以上かかると、これらのメッセージは再び表示され(別の言葉でエンキューされます)、次の繰​​り返しで同じメッセージが返されます。

関連する問題