2009-04-10 130 views
4

如何在不使用WCF時處理中毒消息?下面的代碼創建一個循環,我很好奇,如果MSMQ提供了一個系統來自動處理有毒信息。MSMQ中毒消息處理

MessageQueue mq = new MessageQueue(@".\Private$\My/Queue"); 

while (true) 
{ 
    using (MessageQueueTransaction _transaction = 
      new MessageQueueTransaction()) 
    { 
     _transaction.Begin(); 

     try 
     { 
      Message msg = mq.Receive(_transaction); 

      //HandleMessage(msg); 
      throw new Exception("Kaboom!");    

      _transaction.Commit(); 
     } 
     catch (Exception ex) 
     { 
      _transaction.Abort(); 
     } 

    } 
} 

回答

3

我不認爲有一個簡單的方法來處理使用原始System.Messaging類的毒性消息。我認爲最簡單的解決方案是在消息上設置「TimeToBeReceived」屬性,但這並不完美,因爲如果接收者處於脫機狀態,最終可能會丟失有效的消息。我讀過一些地方,你可以使用PInvoke在MSMQ中實現真正的毒害消息處理,但無法在此找到任何資源。

我發現這篇文章有一些關於如何手動處理有害消息的想法。它可能會提供一些想法:

http://www.cogin.com/articles/SurvivingPoisonMessages.php

+0

右所以我要實現自己的計劃。 – James 2009-04-13 17:55:00