簡體   English   中英

在Msmq中讀取后是否可以防止自動刪除消息

[英]Is it possible to prevent auto delete message after read in Msmq

IDE:VS 2010,Winforms:

我有一個簡單的msmq發送/接收應用程序,我有一個要求,我將在其中讀取消息,並根據該消息,如果該函數尚未就緒,則我將調用其他函數,然后我希望消息進入隊列。

我的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;
    }  

如您在接收代碼中所看到的,我正在接收回消息並驗證消息。在這里,我希望僅當IsValidated為true時才從隊列中刪除該消息,

基本上,我想防止自動刪除消息將來變為false,並且要在隊列中刪除該消息(如果已驗證)。

您能告訴我為實現該目標要進行哪些修改。

您嘗試過Peek嗎?

MessageQueue.Peek方法

返回而不刪除(窺視)此MessageQueue引用的隊列中的第一條消息。 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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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