簡體   English   中英

MSMQ:如何通過確認消息找出原始消息?

[英]MSMQ:How to find out the original message by the acknowledgment message?

我通過指定確認隊列發送消息,以便可以確定消息是否已到達目標隊列。 代碼如下:

 string queuePath = @"FormatName:DIRECT=TCP:127.0.0.1\PRIVATE$\testqueue";
                    string ackPath = @".\private$\ack";
                    MessageQueue msmq = new MessageQueue(queuePath,QueueAccessMode.SendAndReceive);
                    tran.Begin();
                    Message msg = new Message();
                    msg.UseAuthentication = false;
                    msg.Recoverable = true;
                    msg.Body = "HelloWorld";
                    msg.AcknowledgeType = AcknowledgeTypes.FullReachQueue;
                    msg.AdministrationQueue = new MessageQueue(ackPath, QueueAccessMode.ReceiveAndAdmin);
                    msmq.Send(msg, tran);
                    tran.Commit();

一切順利,發出消息后,我可以在隊列“ ack”中找到確認消息。 但是我無法弄清楚確認消息和原始消息之間的關系。

所以我的問題是:如何將確認消息映射到原始消息?

您需要使用System.Messaging.Message.CorrelationId屬性。

獲取或設置確認,報告和響應消息用來引用原始消息的消息標識符。

來源: https : //msdn.microsoft.com/zh-cn/library/system.messaging.message.correlationid(v=vs.110).aspx

var msgToSend = new Message();
// ... set message props including admin queue
var targetQueue = new MessageQueue(...);
targetQueue.Send(msgToSend);

// Read acknowledgment
var adminQueue = new MessageQueue(ackPath);
var msgAck = adminQueue.ReceiveByCorrelationId(msgToSend.Id, new TimeSpan(0, 0, 2));
if (msgAck)
{
    return msgAck.Acknowledgment;
}

也有PeekByCorrelationId方法,或應檢查更多信息的ReceiveByCorrelationId重載形式。

暫無
暫無

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

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