[英]MSMQ Poison message and TimeToReachQueue
我嘗試以以下方式創建有毒消息場景。
1-在服務器上創建了一個消息隊列(事務隊列)。 2-創建了一個接收器應用程序,用於處理該服務器上的傳入消息。 3-在客戶端計算機上創建了一個客戶端應用程序,該客戶端應用程序使用隊列的特定名稱將消息發送到該服務器。
4-我使用帶有以下代碼(C#4.0框架)的發送方客戶端應用程序:
System.Messaging.Message mm = new System.Messaging.Message("Some msg");
mm.TimeToBeReceived = new TimeSpan(0, 0, 50);
mm.TimeToReachQueue = new TimeSpan(0, 0, 30);
mm.UseDeadLetterQueue = true;
mq.Send(mm);
因此,這將超時時間設置為30秒。
我可以在客戶端計算機的消息隊列中看到消息正在等待發送(“等待連接”)。 我的問題是,當它超過30秒(或50秒)時,該消息也永遠不會進入客戶端計算機上的“死信”隊列。
為什么會這樣呢? ...我原以為它會在那里超時。
在Windows 7(客戶端)/ Windows Server 2008 R2(服務器)上測試
您的問題已經有幾天了。 你有發現什么嗎
我對您的情況的解釋是, 拔下電纜是關鍵。
在John描述的情況下,存在一個現有連接 ,並且接收方無法在設置的時間限制內正確處理該消息。
但是,在您的情況下,接收端點永遠不會獲得處理消息的機會 ,因此永遠不會發生超時。 如您所說,消息的狀態為Waiting for connection
。 從邏輯上講, 從未發送過的消息無法超時到達其目的地 。
只是問問自己,如果隊列本質上是不活動的 ,Windows / MSMQ會不必要地犧牲多少資源,以及多久檢查一次MessageQueues的條件? 系統上可能有很多帶有很多消息的隊列。
我期望的行為是,如果重新插入網絡電纜並重新建立連接,那么只有在需要時,才會檢查您的毒葯消息是否超時,並最終移至DeadLetter隊列。
您可能想簽出此方案-還是同時已經簽出了該方案?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.