是否可以阻止在 Msmq 中读取后自动删除消息

本文关键字:读取 消息 删除 Msmq 是否 | 更新日期: 2023-09-27 18:35:50

IDE: VS 2010, Winforms:

我有一个简单的 msmq 发送/接收应用程序,我有一个要求,我将在其中读取消息,并且根据消息,如果该函数尚未准备好,我将调用其他函数,那么我希望消息在队列中。

我的短信发送接收代码:

private void button1_Click(object sender, EventArgs e)
    {
        //MSMQ Send :
        if (MessageQueue.Exists(@".'Private$'MyQ"))
        {
            myQ = new MessageQueue(@".'Private$'MyQ");
        }
        else
        {
            myQ = MessageQueue.Create(@".'Private$'MyQ");
        }
        string xmlText = getxmlString();
        System.Messaging.Message msg = new System.Messaging.Message();
        msg.Formatter = new XmlMessageFormatter();
        msg.Body = xmlText;
        msg.Label = "MyXmlMessage";
        msg.Priority = MessagePriority.Normal;
        myQ.Send(msg);
    }  

 private void button2_Click(object sender, EventArgs e)
    {
        //MSMQ Receive
        myQ = new MessageQueue(@".'Private$'MyQ");
        System.Messaging.Message myMsg = myQ.Receive();
        myMsg.Formatter = new XmlMessageFormatter(new String[] { "System.String,mscorlib" });
        bool IsValidated  = Validate(myMsg.Body.ToString());
    }  
    internal void Validate(string message)
    {
        //some logic  
        return false;
    }  

正如您在接收代码中看到的那样,我正在接收消息并验证消息,在这里,我希望仅在 IsVerified 为真时从队列中删除该消息,

基本上,我想防止将来自动删除消息为false,并希望在经过验证时删除队列中的该消息。

你能告诉我我应该做什么修改来实现这一目标吗?

是否可以阻止在 Msmq 中读取后自动删除消息

你试过偷看吗?

MessageQueue.Peek Method

返回而不删除(查看)此消息队列引用的队列中的第一条消息。Peek 方法是同步的,因此它会阻止当前线程,直到消息可用。

messageQueue.Formatter = new XmlMessageFormatter(
  new Type[] { typeof(System.Xml.XmlElement) });
MessageEnumerator iter = messageQueue.GetMessageEnumerator2();
iter.Reset();
while (iter.MoveNext(new TimeSpan(1000)))
{
    System.Messaging.Message msg = iter.Current;
    msg.Formatter = new ActiveXMessageFormatter();
    var reader = new StreamReader(msg.BodyStream);
    var msgBody = reader.ReadToEnd();
}