2013-02-16 109 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);