【问题标题】:Issue in Correlating request message to resp message in Java Client to access MQ Series将请求消息关联到 Java 客户端中的响应消息以访问 MQ 系列中的问题
【发布时间】:2013-01-31 01:10:43
【问题描述】:

我已经使用 wmqjava 示例程序连接到 MQ 管理器并将消息放入 REQUEST 队列并从 RESPONSE 队列中获取响应。

我可以发送和接收消息。 当有多个消息到达响应队列时,我无法获得正确的消息。

请告知是否有办法在这种方法中关联请求和响应。

还请告知是否推荐这种方法。

【问题讨论】:

  • 我已分配关联 ID 并尝试但结果相同
  • 抱歉延迟回复,不知何故我没有收到您的更新通知。您可以在发送响应时将您的示例代码发布到您分配相关 ID 的位置吗?

标签: ibm-mq


【解决方案1】:

关联 ID 是关联请求和响应消息的最佳方式。您将需要执行以下操作:

在请求者端:
1) 请求消息发送后缓存请求消息的消息id。
2) 获取消息时,在 MQGetMessageOptions.matchOptions 字段中指定 MQMO_MATCH_CORREL_ID,并将上述消息 id 指定为匹配值。

在响应端:
1) 从请求消息中检索消息 ID。
2) 发送响应消息时,设置响应消息的Correlation Id与请求消息的消息ID。

这是您可以关联请求和响应消息的方式。请求者的小sn-p。

        // Send request message
        MQMessage requestMessage = new MQMessage();
        requestMessage.writeUTF("Request Message");
        reqQueue.put(requestMessage);

        // Receive response
        MQMessage responseMessage = new MQMessage();
        responseMessage.correlationId = requestMessage.messageId;
        MQGetMessageOptions gmo = new MQGetMessageOptions();
        gmo.matchOptions = CMQC.MQMO_MATCH_CORREL_ID;

        respQueue.get(responseMessage,gmo);

【讨论】: