Azure Service Busを使用してWindowsサービスのスループットを向上させようとしています。私が気づいたことは、私がこのようなコードを持っていればそれです。Azureサービスバスの読み取りパフォーマンス
オプションは、一定数(私がやっている何のために、通常は12〜16)の後にはほとんど効果がないMaxConcurrentCallsを増やすOnMessageOptions options = new OnMessageOptions
{
MaxConcurrentCalls = maxConcurrent,
AutoComplete = false
};
ある
client.OnMessageAsync(async message =>
{
var timer = new Stopwatch();
timer.Start();
bool shouldAbandon = false;
try
{
// asynchronouse processing of messages
await messageProcessor.ProcessAsync(message);
Interlocked.Increment(ref SimpleCounter);
// complete if successful processing
await message.CompleteAsync();
}
catch (Exception ex)
{
shouldAbandon = true;
Console.WriteLine(ex);
}
if (shouldAbandon)
{
await message.AbandonAsync();
}
timer.Stop();
messageTimes.Add(timer.ElapsedMilliseconds);
},
options);
。
しかし、同じMaxConcurrentCallsで複数のクライアント(QueueClient)を作成すると、パフォーマンスが向上します(ほぼ直線的に)。
私がやっていることは、#queueclientとmaxconcurrentcallsを設定可能にすることですが、複数のqueueclientsを持つのが最善の方法だろうと思います。
私の質問は:Windowsサービスと紺色のサービスバスの悪いまたは良い練習を実行しているメッセージポンプで複数のqueueclientsがあるかどうかです。
サーバーのコア数はいくつですか? Windowsサービスのすべてのインスタンスが同じサーバー上で実行されますか?それ以外の場合は、複数のスレッドではなく複数のワーカーを作成してキューのスループットを向上させることはまったく悪いことではありません。スケールアウトは常に解決策です^^ – Thomas
4コア。サーバあたりのシングルインスタンスが最初の目標(合計5〜7台のサーバ)でした。私は単一のインスタンスを最大限に活用しようとしていました(私は複数のインスタンスをインストールして、私が信じている同様の結果を得ることができました) – Josh