[英]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.