Msmq

Msmq - 如果隊列太大,不發送消息?

  • February 22, 2013

我們最近遇到了一個問題,即 MSMQ(在工作組中的 Windows Server 2008 R2 上)停止發送消息。事實證明,這是因為 MSMQ 已達到消息儲存限制,因此以可怕的“資源不足”錯誤響應所有內容。

到目前為止還算公平,但事情是這樣的:據我們所知,耗盡所有磁碟空間的消息都注定要進入另一台機器上的隊列(我們猜測另一台機器暫時停止接受消息由於我們尚未弄清楚的原因,導致發送 MSMQ 上的所有內容都備份)。因此,處理這些消息實際上應該釋放磁碟空間。事實上,我們發現,一旦我們取消了發送機器上的消息儲存限制,消息就開始發送。在稍後的某個時間點(我們沒有看到什麼時候,但是即使隊列中沒有消息,這個執行緒 MSMQ 也會繼續增長表示應該是 6 小時後),所有佔用磁碟空間的 p*****.mq 消息都被清理乾淨,使我們能夠恢復儲存限制。

對我們來說,MSMQ 會因為超出儲存限製而拒絕發送這些消息對我們來說毫無意義,而發送消息會釋放儲存空間。但我們所擁有的所有證據都表明這就是發生的事情。誰能確認這是否實際上是 MSMQ 的行為方式?

當時傳出隊列的狀態將提供一些見解。

可能發生的情況如下:

1 MSMQ QM1 發送消息

2 MSMQ QM2 發回確認消息

3 Ack 消息無法傳遞,因為配額超出

4 MSMQ QM1 無法完成發送(我假設事務性消息)

5 轉到 1

一旦取消配額,這些步驟就可以成功完成。

引用自:https://serverfault.com/questions/481051