В поставке WebSphere MQ “из коробки” нет какой-либо программы для работы с сообщениями. То есть нет удобного способа помещать сообщения в очереди/файлы, и получать сообщения из очередей/файлов, используя при этом необходимые параметры, например, формат и тип сообщения, CCSID, Encoding и многие другие. Для этих целей предназначена программа “Q”.
Где скачать?
Утилита “Q” входит в состав SupportPac MA01: WebSphere MQ – Q program. Также Вы можете скачать утилиту “Q” здесь:
Содержание архива:
- Директория “V6.0” – актуальная версия программы “Q” для различных платформ;
- Директория “Previous” – предыдущие версии программы “Q” для различных платформ;
- Директория “Licenses” – файлы лицензионных соглашений;
- ma01_readme.txt – файл с описанием.
Для установки утилиты распакуйте архив ma01.zip в любое удобное место и через командную строку запустите версию “Q”, подходящую для вашей платформы.
Описание
“Q” (или “q”) – это утилита командной строки, позволяющая взять сообщения из “источника”, в качестве которого может выступать очередь или файл, и поместить в “приемник”, которым так же может быть очередь (даже очередь другого менеджера) или файл. Конечно, для подобных действий можно использовать утилиту rfhutil, но когда требуется работать с потоком сообщений, или автоматизировать какое-либо действие, без утилиты “q” не обойтись. Именно утилита “q” позиционируется IBM как первое средство для работы с сообщениями. При выполнении операций put/get возможно использовать необходимые параметры, которые подробно расписаны в файле ma01_readme.txt.
Соединение с удаленным менеджером
Для работы с удаленным менеджером очередей необходимо:
1. Установить MQ Client на ПК с которого будет запускаться утилита “q”.
2. На этом же ПК перейти в: Пуск -> Панель управления -> Система -> Дополнительные параметры системы -> Переменные среды.
В разделе “Системные переменные” создать переменную MQSERVER со значением по шаблону: channel_name/TCP/host(port), где:
- channel_name – имя канала для соединения с сервером
- TCP – тип соединения TCP/IP
- host – IP адрес сервера
- port – порт для соединения с менеджером очередей
Например: SYSTEM.DEF.SVRCONN/TCP/9.242.192.146(1414)
3. Для того, что бы утилита “q” смогла соединиться с указанным в MQSERVER удаленным менеджером, необходимо перезапустить компьютер.
Примеры работы с утилитой q
Как отмечалось ранее, “q” может читать сообщения из файла и помещать их в очередь, а также брать сообщения из очереди и помещать их в файл. Таким образом, два экземпляра утилиты “Q” могут использоваться в качестве примитивной программы для передачи файлов.
Далее рассмотрим несколько примеров работы с утилитой. Предполагается, что утилита работает на ПК пользователя, на котором установлен MQ Client и настроено соединение с удаленным менеджером QM1.
1. Все сообщения из очереди D.TEST1 менеджера очередей QM1 скопировать в очереди D.TEST2, D.TEST3 и файл C:\copied_messages.txt.
1 |
q -m QM1 -i D.TEST1 -F C:\copied_messages.txt -o D.TEST2 -o D.TEST3 |
1 2 3 |
Хозяйке на заметку: При работе с файлами, то есть при использовании ключа -F, необходимо, чтобы ключ -F следовал сразу после первой пары "-i значение" или "-o значение". |
2. Поместить в очередь D.TEST2 менеджера очередей QM1 сообщения из файлов C:\test_message1.txt, C:\test_message2.txt, C:\test_message3.txt, установив CCSID=1025 и Encoding=785.
1 2 3 |
q -c1025:785 -m QM1 -o D.TEST2 -F C:\test_message1.txt q -c1025:785 -m QM1 -o D.TEST2 -F C:\test_message2.txt q -c1025:785 -m QM1 -o D.TEST2 -F C:\test_message3.txt |
3. Написать скрипт (ОС Windows) для специалистов первой линии поддержки, который будет выбирать первое сообщение из указанной очереди менеджера QM1 и помещать его в очередь D.TRASH. Для информации выводить длину сообщения.
Предлагаемый вариант решения (bat-файл):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
@echo off cls echo ========= Перемещение первого сообщения из указанной очереди в очередь D.TRASH ========= echo ********* Введите имя очереди из которой необходимо переместить сообщение: ********* set /P inputq= echo ********* Перемещаю первое сообщение из очереди %inputq% в очередь D.TRASH... ********* D:\Util\q\q -m QM1 -I %inputq% -o D.TRASH -L1 -dl if %ERRORLEVEL% == 0 goto move_ok if not %ERRORLEVEL% == 0 goto error :move_ok echo ********* Перемещение выполнено ********* echo ********* Нажмите любую клавишу для выхода ********* pause > nul exit :error echo !!!!!!!!! Не удалось выполнить перемещение сообщения !!!!!!!!! echo ********* Нажмите любую клавишу для выхода... ********* pause > nul exit |
Несмотря на широкие возможности утилиты “q”, у нее есть и ряд минусов. Основным из которых, на мой взгляд, является то, что работая с файлами, то есть загружая сообщения в очередь из файлов или, наоборот, выгружая сообщения из очереди в файлы, необходимо учитывать, что в файле может находиться только одно сообщение. Другими словами, если выгрузить несколько сообщений в один файл, а потом попытаться загрузить из него сообщения в очередь, получится одно сообщение в очереди.
Так же стоит отметить неудобную работу с сообщениями в составе группы. Не понятно как задавать логический номер сообщения (sequence number), флаги “сообщение в группе” и “последнее сообщение в группе”. Для этих целей удобнее использовать утилиту rfhutil.
Leave a Reply