【发布时间】:2012-08-16 15:15:33
【问题描述】:
即使该消息不是队列中的第一个消息,我是否可以通过其 CorrelationId 过滤并从队列中获取消息?
【问题讨论】:
即使该消息不是队列中的第一个消息,我是否可以通过其 CorrelationId 过滤并从队列中获取消息?
【问题讨论】:
是的。您必须在MQGetMessageOptions 上使用MQGMO_MATCH_CORREL_ID 匹配选项。
MQMessage getMsg = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.MatchOptions = MQC.MQMO_MATCH_CORREL_ID;
// Copy correlationID of the message you want to receive
getMsg.CorrelationId = correlationId;
queue.Get(getMsg, gmo);
编辑:
CorrelationId 用于关联两条消息,通常是请求和回复消息。所以就这样搞定了。
1) 客户端应用程序发送请求消息。发送消息后缓存发送消息的messageId。
2) 将此 messageId 用作消息选择的相关 ID。
recvdResponseMsg.CorrelationId = requestMsg.MessageId;
gmo.MatchOptions = MQC.MQMO_MATCH_CORREL_ID;
3) 在处理请求消息的服务器应用程序中,发送响应消息时,只需将请求消息的messageId复制到响应消息的correlationId即可。
responseMsg.CorrelationId = requestMsg.MessageId;
【讨论】: