簡體   English   中英

MSMQ Poison消息和TimeToReachQueue

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM