2013-02-16 69 views
0

MSMQ中的第一條消息不在隊列中接收,但之後我們的系統處於正常狀態,任何人都可以解釋。MSMQ丟失的第一條消息

簡單代碼

公共類MSMQExample {

private MessageQueue GetQueue(){ 

    MessageQueue _queue=new MessageQueue(@」.\Private$\Test"); 
    return _queue; 
} 

public void SendMessage(){ 
     MessageQueue queue=GetQueue(); 
     Message msg = new Message(); 
     msg.Body ="Test" 
     queue.Send(msg); 
} 
//Call this method in Application_Start event in new Task. 
public void StartQueue(){ 
    MessageQueue queue=GetQueue(); 
    Message msg=null; 
    while(true){ 
     msg=queue.Receive(); 
     //Processing Code 
    } 
} 

}

+0

請問您能否爲我們提供更多信息!也許你使用一些代碼來接收消息。消息不會在MSMQ中消失。 – 2013-02-16 18:45:23

+0

如果消息無法發送,那麼「queue.send(msg)」會拋出一個異常,您可以捕獲並顯示。您可以使用性能監視器來跟蹤隊列中的消息數量和整個系統的數量,這對於瞭解是否/何時創建和使用消息非常有用。 – 2013-02-17 14:13:17

回答

0

要做到這一點,你必須將郵件作爲Recoverable標記。
默認情況下,MSMQ消息僅保留在內存中,但Recoverable消息被備份到磁盤以啓用可靠的MSMQ消息傳遞。

using System.Messaging; 
Message recoverableMessage = new Message(); 
recoverableMessage.Body = "Sample Recoverable Message"; 
recoverableMessage.Recoverable = true; 
MessageQueue msgQ = new MessageQueue(@".\$private\Orders"); 
msgQ.Send(recoverableMessage);