我正在嘗試使用Azure服務總線來提高Windows服務的吞吐量。我注意到的是,如果我有這樣的代碼。Azure服務總線讀取性能
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
};
增加MaxConcurrentCalls具有一定的次數後影響不大(12-16通常是我在做什麼)。
但使用相同的MaxConcurrentCalls創建多個客戶端(QueueClient)確實會提高性能(幾乎線性)。
所以我一直在做的是使#queueclient和maxconcurrentcalls可配置,但我想知道是否有多個隊列客戶端是最好的方法。
所以我的問題是:有多個queuepients與messagepumps運行糟糕或良好的做法的Windows服務和天藍色的服務總線?
服務器上有多少核心?你所有的Windows服務實例都將在同一臺服務器上運行?否則,創建多個工作者而不是多個線程來增加隊列的吞吐量並不是一個壞習慣。擴大總是一個解決方案^^ – Thomas
4核心。每個服務器的單個實例是最初的目標(共有5-7個服務器)。我期望從單個實例中獲得最大收益(我可以安裝多個實例並獲得我相信的類似結果) – Josh