Вы также кланули очередь ответов. Следовательно, ответные сообщения балансируются между двумя менеджерами очереди переднего плана.
Один из способов отправки ответов в правильный пункт назначения - это не кластерные очереди ответов. Вместо этого определите удаленное определение очереди для очередей ответов в менеджерах очередей очереди. Затем используйте атрибут 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, также кластерные? –