QueueClient.OnMessageメソッドは、常に別のスレッドでコールバックパラメータを実行しますか?Azure ServiceBus QueueClient.OnMessageは別のスレッドで実行されます
MaxConcurrentCallsを10に設定すると、queueClientはメッセージを並列に処理するために最大10個のスレッドをスピンアップすると仮定します。 MaxConcurrentConnectionの値を1に設定した場合、または現在のスレッドで実行した場合に新しいスレッドが作成されますか?
私の実際の問題:
ワーカーの役割の中で私は複数のキューを扱いたいと思いますが、すべてのプロセスを同時に処理したいと思います。例えば。
_queueClient1.OnMessage(x =>
{
// Do something
}, new OnMessageOptions { MaxConcurrentCalls = 1});
_queueClient2.OnMessage(x =>
{
// Do something
}, new OnMessageOptions { MaxConcurrentCalls = 1 });
_queueClient3.OnMessage(x =>
{
// Do something
}, new OnMessageOptions { MaxConcurrentCalls = 1 });
_queueClient4.OnMessage(x =>
{
// Do something
}, new OnMessageOptions { MaxConcurrentCalls = 1 });
それが実行できる前に_queueClient2が終了するの_queueClient4コールバックが待っていないように、この結果は、各コールバックで並列に実行されているでしょうか?
私はMaxConcurrentCallsを10に設定してOnMessageを呼び出すと、メッセージはキューで使用可能になるまで待機します。次に、各スレッドは独立してメッセージを処理します。コールバックが返るまで、各スレッドは他のメッセージを処理できません。 –
スレッドは、処理するメッセージがある場合にのみスピンアップされます。保留中のReceive呼び出しは1つだけで、MaxConcurrentCalls数に達するまで、受信メッセージの異なるスレッドでコールバックを同時に呼び出します。 –
FWIW - コードを反映すると、このデフォルト値は1です。したがって、デフォルトでは、OnMessageパターンは一度に1つのスレッドでのみ実行されるように見えます。 – ProVega