Azure Service Bus を使用して、webrole と workerrole でメッセージを管理しています。
ループを使用せずにキューから複数のメッセージを一度に取得する方法を知る必要があります。
Azure Service Bus を使用して、webrole と workerrole でメッセージを管理しています。
ループを使用せずにキューから複数のメッセージを一度に取得する方法を知る必要があります。
Service Bus キューには、一度に複数のメッセージを取得する方法はありませんが、メッセージがキャッシュされるプリフェッチを設定できます (その結果、パフォーマンスが向上します)。プリフェッチの詳細については、こちらをご覧ください。
本当にメッセージの一括読み取りが必要な場合は、@AvkashChauhan の指摘を考慮してください。Windows Azure ストレージ キューは、1 回のトランザクションで最大 32 個のメッセージを一度に読み取ることができます。各キュー メッセージを個別に削除する必要があります。一括削除はありません。
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)
キューからメッセージを取得するときは、複数のメッセージを 1 つのストレージ トランザクションにまとめてバッチ処理します。キュー サービス API の GetMessages メソッドを使用すると、指定した数のメッセージを 1 回のトランザクションでキューから取り出すことができます。
GetMessages メソッドを介してメッセージを取得する場合、キュー サービス API が 1 回のデキュー操作でサポートする最大バッチ サイズは 32 に制限されています。この制限を超えると、実行時例外が発生します。