我使用Azure隊列後端測試NServiceBus。我配置使用NServiceBus所有默認設置,並有這樣的代碼來發送消息:當使用NServiceBus使用Azure隊列時Bus.Send被阻塞
while ((data = Console.ReadLine()) != null)
{
Stopwatch sw = new Stopwatch();
sw.Start();
Bus.Send("testqueue", new Message() {Data = data});
sw.Stop();
Console.WriteLine("Sent time: " + sw.ElapsedMilliseconds);
}
當我的dev的機器上運行,它需要〜700毫秒來發送消息到隊列。直接使用Azure存儲客戶端編寫時,隊列很遠,大約350毫秒。
現在我有兩個問題:
- 我不想線程上Bus.Send呼叫阻塞。一種選擇是使用async \ await模式。另一種選擇是在內存隊列中傳遞消息,類似於0MQ。最後一個選項並不能保證提供當然,但假設有一些監控功能,我可以忍受。
- 爲什麼發送消息需要兩次簡單寫入隊列的時間?這可以優化嗎?
感謝您的答覆。問題不在於長時間的延遲。預計從我的開發機器300毫秒。問題是沒有async \ await選項,並且在發送消息時必須阻塞線程。我們希望在一臺機器上每秒處理1000個請求。如果我們這樣做,我們將至少有1000個線程正在旋轉並等待來自NServiceBus的響應。當您執行async \ await時,線程將在等待期間釋放。否則,線程就處於等待狀態並阻塞。 –
這是在團隊雷達提供,但現在我建議你使用多個發送線程包裝發送並行爲例如 –
並使用多個隊列以及順便說一句,你將無法填充成千上萬的消息無論您使用多少個線程,都可以始終通過單個隊列 –