4

QueueClient Message Pump を使用して、実行時間の長い Azure Service Bus メッセージを多数処理しているワーカー ロールをスケーリングする最善の方法は何ですか。

QueueClient.OnMessageOptions.MaxConcurrentCalls = 6 と QueueClient.OnMessage を使用している場合、一度に最大 6 つのメッセージしか処理できないということですか?

OnMessage コールバック内で長時間実行される処理を実行して新しいタスクを生成し、その処理を完了するのは悪い形式ですか?

代わりに QueueClient.OnMessageAsync を使用する必要がありますか?

助けてくれてありがとう。

4

1 に答える 1

3

「長時間実行」とは、IO バウンドまたは CPU バウンドのことですか?

IO バウンドと仮定すると、OnMessage コールバックで新しいタスクを生成しません。これにより、スレッド管理のオーバーヘッドが発生し、大規模な処理が遅くなる可能性があります。

IO バインド操作を使用している場合は、OnMessageAsyncの使用を検討し、これらの操作の非同期実装を待機していることを確認してください。これにより、既存のスレッドがより効率的に使用されます。

操作が CPU バウンドの場合は、タスクの作成により多くのことができる場合があります。このメカニズムについては、Stephen Cleary による一連の優れた投稿で説明されています。

http://blog.stephencleary.com/2013/10/taskrun-etiquette-and-proper-usage.html

MaxConcurrentCallsプロパティは、サービス バスへの同時要求の数を制御しますIO バウンドで使用可能な帯域幅によって制限されている場合、この数を増やしても影響は限定的です。お客様の環境に最適な値を得るために、Azure クライアント側のパフォーマンス カウンターで少しパフォーマンス テストを行うことをお勧めします。

于 2015-01-21T15:42:57.293 に答える