客户端过滤消息由CorrelationId

时间:2012-08-15 13:10:59

标签: c# ibm-mq

我是否可以通过CorrelationId过滤并从队列中获取消息,即使该消息不是队列中的第一个消息?

1 个答案:

答案 0 :(得分:1)

是。您必须在MQGMO_MATCH_CORREL_ID上使用MQGetMessageOptions匹配选项。

   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作为消息选择的correlationId。

 recvdResponseMsg.CorrelationId = requestMsg.MessageId;
 gmo.MatchOptions = MQC.MQMO_MATCH_CORREL_ID;

3)在服务器应用程序(处理请求消息)中,发送响应消息时,只需将请求消息的messageId复制到响应消息的correlationId。

 responseMsg.CorrelationId = requestMsg.MessageId;