Обмен сообщениями с использованием WebSphere MQ: практическое введение
9.4.10. Отправка запроса службе
Ниже рассказывается, как отправить в очередь echo сообщение с запросом вызывающего генерацию триггерного сообщения и его добавление в очередь инициации, заданную атрибутами очереди echo.
Триггерное сообщение обрабатывается триггерным монитором WebSphere MQ, который запускает в ответ на такие сообщения программу amqsech с использованием объекта определения процесса, заданного в параметрах очереди echo.
Триггерный монитор WebSphere MQ передает программе amqsech все сведения из триггерного сообщения, необходимые для определения очереди для обработки сообщений.
Программа amqsech генерирует ответы в виде копий исходных сообщений и направляет их очереди ответов, заданной в дескрипторах сообщений запросов.
Выполните следующие действия.
- Выполните следующую команду:
amqsreq echo host1/echo.hub echo.replies.manual
- Введите текст одного сообщения и нажмите Enter (пока не вводите пустую строку после сообщения).
- Изучите вывод триггерного монитора, включая дополнительную информацию, которую он отображает. Монитор сообщает о том, что в очереди инициации было сгенерировано триггерное сообщение, обработанное затем триггерным монитором, который запустил в ответ программу amqsech. Спустя примерно 10 секунд (после завершения программы amqsech, не дождавшейся следующего сообщения) генерируется дополнительный вывод примерно такого вида:
C:\PROGRA~1\IBM\WEBSPH~1\Tools\c\samples\bin\amqsech.exe "TMC 2echo amqsech C:\Program Files\IBM\WebSphere MQ\Tools\c\samples\bin\amqsech.exe host1/echo.hub " Sample AMQSECHA start Example request message MQGET ended with reason code 2033 Sample AMQSECHA end End of application trigger.
- Этот вывод свидетельствует о том, что программа amqsech, запущенная триггерным монитором WebSphere MQ, обработала сообщение и отправила ответ в очередь echo.replies.manual, заданную в команде, которой вызывается amqsreq.
Изучите сообщение, полученное очередью echo.replies.manual. Если для этого используется программа amqsbcg, запустите ее в новом окне командной строки, чтобы не прерывать работу amqsreq.
Обратите внимание на следующие сведения в составе ответа:
- тип сообщения ( MsgType ) – ответ (reply, код 2);
- параметры, такие как идентификатор сообщения ( MsgId ) и корреляционный идентификатор ( CorrelId ), определены (имеют значения), поскольку amqsech копирует идентификатор сообщения из дескриптора сообщения-запроса в поле корреляционного идентификатора дескриптора сообщения-ответа. Это позволяет запрашивающему приложению сопоставлять полученные ответы отправленным запросам. Уникальный идентификатор для сообщения-ответа генерируется WebSphere MQ.
- Вернитесь в окно командной строки, в котором был отправлен запрос, с помощью amqsreq. Нажмите Enter, не вводя ничего. Спустя примерно 10 секунд программа amqsreq завершится, генерируя следующий вывод:
Sample AMQSREQ0 start server queue is echo replies to echo.replies.manual Example test message response <Example test message> no more replies Sample AMQSREQ0 end
9.4.11. Создание объекта модельной очереди для динамической очереди ответов
Ниже освещается определение объекта модельной очереди для создания временных динамических очередей ответов. Динамическое создание очередей ответов выполняет программа amqsreq при запросе службы echo. Для этого упражнения мы воспользуемся WebSphere MQ Explorer или командами MQSC.
Применение WebSphere MQ Explorer
Выполните следующие действия.
- Щелкните правой кнопкой папку Queues в менеджере host1/echo.hub и выберите New\Model Queue.
- Введите echo.replies.tempdyn в поле Name.
- Щелкните Next.
- Введите следующий текст в поле Description:
Temporary dynamic reply-to queues for echo service
- Перейдите в секцию Extended.
- Заметьте, что в поле Definition Type задано значение Temporary Dynamic.
- Щелкните Finish.
Применение команд MQSC
Выполните следующие действия.
- Выполните следующую команду MQSC в отношении менеджера host1/echo.hub:
DEFINE QMODEL('echo.replies.tempdyn') + DESCR('Temporary dynamic reply-to queues for echo service')
- Выполните следующую команду MQSC, чтобы проверить свойства созданного объекта:Обратите внимание на тип определения (атрибут DEFTYPE ): он является временным и динамическим ( TEMPDYN ).
DISPLAY QMODEL('echo.replies.tempdyn') DESCR DEFTYPE
9.4.12. Отправка запроса с использованием временной динамической очереди ответов
Ниже рассказывается, как запросить службу (см. "Обмен сообщениями с использованием WebSphere MQ: практическое введение" ). При этом в командной строке вызова amqsreq в качестве приемника ответов задана модельная очередь echo.replies.tempdyn.
Когда программа amqsreq открывает модельную очередь, менеджер очередей автоматически создает временную динамическую очередь на основе атрибутов объекта модельной очереди echo.replies.tempdyn. По завершении программы amqsreq менеджер очередей автоматически удаляет этот объект. Если программа завершена досрочно, например нажатием Ctrl+C во время обработки, удаление будет выполнено через несколько секунд после остановки amqsreq.
Выполните следующие действия.
- Запустите amqsreq следующей командой:Программа генерирует следующий вывод:
amqsreq echo host1/echo.hub echo.replies.tempdyn
где AMQ.42DD88DE02C70120 – имя динамической очереди.Sample AMQSREQ0 start server queue is echo replies to AMQ.42DD88DE02C70120
- Изучите свойства временной динамической очереди следующим образом.
- С помощью WebSphere MQ Explorer:
- Выберите папку Queues менеджера очередей host1/echo.hub.
- Включите в WebSphere MQ Explorer отображение временных очередей (см. рис. 9.1).
- Обратите внимание на идентичность описания динамической очереди и объекта модельной очереди, на основе которого она создана.
- С помощью команд MQSC.
- С помощью WebSphere MQ Explorer:
- Заметьте, что с приложением amqsreq работают так же, как с очередью, объявленной вручную.
- Обратите внимание, что после завершения приложения amqsreq временная динамическая очередь удаляется автоматически.