我使用 wmqjava 示例程序连接到 MQ 管理器并将消息放入 REQUEST 队列并从 RESPONSE 队列中获取响应。
我可以发送和接收消息。当有多个消息到达响应队列时,我无法获得正确的消息。
请告知是否有一种方法可以在这种方法中关联请求和响应。
还请告知是否推荐这种方法。
我使用 wmqjava 示例程序连接到 MQ 管理器并将消息放入 REQUEST 队列并从 RESPONSE 队列中获取响应。
我可以发送和接收消息。当有多个消息到达响应队列时,我无法获得正确的消息。
请告知是否有一种方法可以在这种方法中关联请求和响应。
还请告知是否推荐这种方法。
Correlation id 是关联请求和响应消息的最佳方式。您将需要执行以下操作:
在请求者端:
1) 请求消息发送后缓存请求消息的消息id。
2) 获取消息时,在 MQGetMessageOptions.matchOptions 字段中指定 MQMO_MATCH_CORREL_ID,并将上述消息 id 指定为匹配值。
在响应端:
1) 从请求消息中检索消息 id。
2)在发送响应消息时,设置响应消息的Correlation Id与请求消息的消息ID。
这就是您可以关联请求和响应消息的方式。请求者的小片段。
// 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);