我正在對使用2個超時的傳奇進行一些壓力測試。在測試期間,大約21K傳奇的被創造。所以這將意味着42K超時,但我注意到,傳奇的timeoutsdispatcher隊列正在充斥着數以百計的數千條消息,直到它崩潰,因爲MSMQ存儲限制被擊中。NServiceBus Timeoutsdispatcher隊列在壓力測試期間被消息充斥
自從我將持久性機制從RavenDB切換到SQL Server後,我看到了這種行爲。
有沒有人有一個想法什麼可能是錯的?
交通:MSMQ
持久性:使用NHibernate的 套餐:
NHibernate version 4.0.4.4000
NServiceBus version 5.2.14
NServiceBus.Host version 6.0.0
NServiceBus.Log4Net version 1.0.0
NServiceBus.NHibernate version 6.2.7
測試設置:
*端點1發送22000個消息到端點2.
*端點2名的主機開始工作一段傳奇通過那個消息。
*每個傳奇發佈一個事件,然後請求2個超時:1在4分鐘,1在10分鐘。
觀察到的行爲:
*端點1在一分鐘內發送了22K條消息。
*端點2(傳奇)每秒處理5到10條消息。
* 4分鐘後,第一次超時被觸發,而端點2仍在處理來自其隊列的消息,因此仍在創建新的saga實例。
*從那一刻開始,傳奇端點的timeoutsdispatcher隊列正在充滿消息。
* 10分鐘左右後,timeoutsdispatcher隊列已經包含超過170K條消息,並且仍然填滿。
*繼續進行,直到端點2崩潰,因爲命中MSMQ存儲限制或處理來自輸入隊列的所有消息。如果後者發生在第一位,則timeoutsdispatcher隊列消息計數開始減少,直到最終達到0.
是的,我在同一臺機器上進行壓力測試,就像我先用RavenDb做的那樣:我的帶有嵌入式SSD的本地筆記本電腦。消息處理本身沒有任何問題。傳奇端點運行良好,每秒處理5到10條消息。我只是看到,我的傳奇的timeoutspispatcher隊列正在充斥着消息,這是我創建的傳奇的火焰的2個超時中的第一個。 –
我添加了我的測試設置和觀察的描述。 –
我已經更新了我的答案,也許它有幫助。 –