Если ваша целевая очередь запросов находится на другом сервере, ваше приложение будет по-прежнему иметь тот же код, но имя, которое вы укажете, не будет именем QLOCAL в администраторе очередей, к которому вы подключены, а вместо этого будет QREMOTE. Если вы используете JNDI для обращения к своим очередям, вам даже не нужно менять имя очереди, нужно изменить только реальное имя очереди MQ, на которое есть ссылка.
Например, если вы используете инструмент командной строки JMSAdmin, вы измените имя только в атрибуте QUEUE: -
DEFINE Q(myqueue2) QUEUE(Q.FOR.REQUESTS)
Тогда в ваших двух администраторах очередей будут определения, которые выглядят примерно так: -
Местное управление качеством (QM1)
DEFINE QREMOTE(Q.FOR.REQUESTS) RNAME(WORK.QUEUE) RQMNAME(QM2) XMITQ(QM2)
DEFINE QLOCAL(QM2) USAGE(XMITQ) DESCR('Transmission queue for messages to QM2')
DEFINE QLOCAL(MY.REPLY.Q) DESCR('My application queue for responses')
DEFINE CHANNEL(TO.QM2) CHLTYPE(SDR) CONNAME('(qm2.machine.com(1414)') XMITQ(QM2)
DEFINE CHANNEL(TO.QM1) CHLTYPE(RCVR)
Удаленное управление качеством (QM2)
DEFINE QLOCAL(WORK.QUEUE)
DEFINE QLOCAL(QM1) USAGE(XMITQ) DESCR('Transmission queue for messages to QM1')
DEFINE CHANNEL(TO.QM2) CHLTYPE(RCVR)
DEFINE CHANNEL(TO.QM1) CHLTYPE(SDR) CONNAME('qm1.machine.com(1414)') XMITQ(QM1)
Кроме того, в приложении запроса / ответа рекомендуется указывать имя очереди, куда должен быть отправлен ответ, как часть сообщения запроса, и кодировать приложение-ответчик для чтения этих полей (поля ReplyTo). ) и использовать их для отправки ответного сообщения, таким образом, не требуя дополнительного определения QREMOTE на Remote QM (QM2 в моем примере).