我有一個客戶端服務器應用程序利用MSMQ和NServiceBus進行消息傳遞。在最近的一些測試,客戶留停用一段時間,MSMQ的意外行爲被發現:MSMQ QMThreadNo和CleanupInterval
- MSMQ具有線程的默認數量,使用它來處理隊列 (在註冊表中設置爲QMThreadNo)。當隊列長時間處於休眠狀態 時,它們會累積大量的消息。這些大隊列保留了MSMQ比平時有限的 線程的數量,因此需要更長的時間處理實際處於活動狀態的隊列 。
- 可以將註冊表項設置爲更高的線程數。
- 客戶端未發送/接收消息的 時間(在註冊表作爲CleanupInterval設置)的一組週期將變爲 「無效」狀態,並最終他們的隊列將直到 消息被刪除從該客戶端發送,迫使隊列的重新創建。
- CleanupInterval可以從其默認值5分鐘更改爲更長的時間。
有沒有人遇到過這些問題?如果是這樣,那裏有什麼可能的解決方案?
*謝謝你的回覆John。 要清除任何歧義,我們有一個部分連接的客戶端/服務器應用程序,需要實時消息。我們已經在你的一些文章中讀到過,MSMQ最初不是爲實時設計的,但可以配置爲這樣做。 我們的問題是客戶端上的傳出隊列被設置爲「已連接」。然而,服務器上的傳出隊列被設置爲「未激活」長達30分鐘,這對於我們的「實時」系統是低效的。經過這段時間後,服務器上的傳出隊列被重新設置爲「已連接」,並且消息再次正常流動。 – absentees 2012-03-29 03:03:46
我們已將QMThreadNo修改爲3000,但尚未發現從非活動狀態變爲連接狀態的變化。我們也將WaitTime修改爲5000,希望它能減少處理不同線程之間的時間。 – absentees 2012-03-29 03:07:30
所以你已經證明它不是一個線程問題。除非你有很多很多傳出隊列,否則我不會指望它是無論如何。 – 2012-03-29 10:48:36