您也聚集了回覆隊列。因此,應答消息正在兩個前端隊列管理器之間進行負載平衡。
將回復發送到正確目標的一種方法不是羣集回覆隊列。而應爲後端隊列管理器中的回覆隊列定義遠程隊列定義。然後使用請求消息的replyToQueueManager
屬性來決定並將回覆消息放到適當的回覆隊列中。
例如,以下腳本在兩個後端隊列管理器的每一箇中定義兩個遠程隊列。該腳本假設名稱爲REPLY_QUEUE
的隊列在前端隊列管理器中定義。
DEF QREMOTE(REP_Q_FRONT_END_QM1) RNAME(REPLY_QUEUE) RQMNAME(FRONT_END_QM1) CLUSTER(REQUEST_REPLY_CLUSTER)
DEF QREMOTE(REP_Q_FRONT_END_QM2) RNAME(REPLY_QUEUE) RQMNAME(FRONT_END_QM2) CLUSTER(REQUEST_REPLY_CLUSTER)
然後,後端應用程序處理請求消息打開遠程隊列。
MQQueue mqReplyQ_QM1 = queueManager.accessQueue("REP_Q_FRONT_END_QM1", CMQC.MQOO_FAIL_IF_QUIESCING | CMQC.MQOO_OUTPUT);
MQQueue mqReplyQ_QM2 = queueManager.accessQueue("REP_Q_FRONT_END_QM2", CMQC.MQOO_FAIL_IF_QUIESCING | CMQC.MQOO_OUTPUT);
然後使用replyToQueueManagerName
屬性來發送回復正確的隊列管理器。
MQMessage msgRequest = new MQMessage();
mqRequestQ.get(msgRequest, mqgmo);
if(msgRequest.replyToQueueManagerName.trim().equals("FRONT_END_QM1")) {
mqReplyQ_QM1.put(msgReply);
} else {
mqReplyQ_QM2.put(msgReply);
}
有可能是更好的解決方案,但上述將做的工作。
您的回覆隊列是否也用於接收前端QM中的響應? –