我正在使用Azure Service Bus尝试提高Windows服务的吞吐量。 我发现,如果我有像这样的代码。
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);
选项即为
OnMessageOptions options = new OnMessageOptions
{
MaxConcurrentCalls = maxConcurrent,
AutoComplete = false
};
在某个特定数量(通常为12-16)之后,增加MaxConcurrentCalls的效果很小。
但是,使用相同的MaxConcurrentCalls创建多个客户端(QueueClient)确实可以提高性能(几乎是线性的)。
因此,我一直在做的是使#queueclient和maxconcurrentcalls可配置,但我想知道是否使用多个queueclients是最佳方法。
所以我的问题是:对于Windows服务和Azure服务总线,使用多个具有消息泵的queueclients是好还是坏的做法?