2016-05-12 1 views
0

У нас есть приложение для приложений и бэкэнд-приложений, развернутое в Websphere, и общается через IBM MQ поверх JMS (синхронные сообщения). Теперь настроем кластер с 2 менеджерами очередей в интерфейсе и 2 в бэкэнд-приложениях и настроен с использованием JNDI.Websphere MQ Cluster/HQ Важная сессия с менеджерами очереди для синхронизированных сообщений

Когда мы пытаемся поместить сообщение в интерфейс QMR1, он идет либо из одного бэкэнд, либо обрабатывается. Но ответ иногда идет QMR2 и не всегда QMR1.

QN: Как мы можем установить параметры в настройках MQ/JMS в Websphere, чтобы получать сообщение из того же QMR, который мы отправили.

Прошу совета.

+0

Отвечаете ли вы на очереди, чтобы получать ответы в QM, также кластерные? –

ответ

0

Вы также кланули очередь ответов. Следовательно, ответные сообщения балансируются между двумя менеджерами очереди переднего плана.

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

Там могут быть лучшие решения, но вышеизложенное выполнит эту работу.

Смежные вопросы