Фундаментальные основы WebSphere MQ V6

Обмен сообщениями с использованием WebSphere MQ: практическое введение

Разбить на страницы
Показывать лекцию целиком

В этой лекции обсуждаются следующие темы:

  • Обзор глав с практическими заданиями
  • Настройка окружения
  • Обмен сообщениями с использованием локального менеджера очередей
  • Создание службы обработки запросов и ответов на основе очереди
  • Рассылка сообщений по подписке в WebSphere MQ с использованием JMS
  • 9.1. Обзор глав с практическими заданиями

    Этот курс содержит практическое введение в очереди сообщений WebSphere MQ, которое разбито на две лекции.

  • В этой лекции вы научитесь создавать и администрировать менеджеры очередей, обеспечивающие доступ к службам обработки сообщений. Эти службы доступны посредством менеджеров очередей и поддерживают различные модели обмена сообщениями: межточечный обмен либо рассылку сообщений по подписке.
  • В лекции 10 вы научитесь связывать менеджеры очередей с использованием TCP/IP-сетей как в центрально-лучевую (hub-and-spoke) инфраструктуру, так и в кластеры с целью предоставления доступа к этим службам.
  • При изучении материалов введения вы будете пользоваться административными интерфейсами и примерами приложений из состава WebSphere MQ.

    9.1.1. Администрирование менеджеров очередей

    Многие административные задачи решаются с использованием WebSphere MQ Explorer либо интерфейса сценариев MQSC. Ниже приводятся пошаговые инструкции для обоих случаев.

    Если у вас нет опыта работы с WebSphere MQ, рекомендуем воспользоваться WebSphere MQ Explorer. По мере накопления знаний можно приступать к освоению MQSC – так вы научитесь создавать сценарии для решения описанных в этой главе задач. Так, процедуры контроля изменений могут требовать сценариев MQSC для внесения любых изменений в производственной среде.

    Примечание Здесь и далее используются имена в нижнем регистре как оптимальные для администрирования с применением WebSphere MQ Explorer.

    Следите, чтобы в командах MQSC значения атрибутов и имена объектов, содержащие символы в нижнем регистре, были заключены в одинарные кавычки. Регулярное применение кавычек – общая рекомендация при работе с MQSC, позволяющая избежать путаницы.

    9.1.2. Программы-примеры в WebSphere MQ

    С WebSphere MQ поставляется множество программ-примеров, как в виде исходного кода, так и в прекомпилированном, готовом к применению виде. В этой книге приводятся примеры на языке программирования С, использующие интерфейс очередей сообщений (MQI) для демонстрации межточечного обмена сообщениями. Имеются также аналогичные примеры на других языках программирования.

    Примеры на языке Java, использующие JMS – стандартный интерфейс прикладного программирования (API), – иллюстрируют обмен сообщениями по механизму публикации-подписки. По большому счету то же верно для клиентов IBM Message Service (XMS).

    Обмен сообщениями по подписке также может быть реализован при помощи соответствующих команд WebSphere MQ, адресованных брокеру публикации-подписки WebSphere MQ. Это возможно с использованием любого из API для межточечного обмена сообщениями, поддерживаемого WebSphere MQ.

    Прежде чем приступать к созданию решений на основе WebSphere MQ, прикладным программистам рекомендуется изучить прилагаемые примеры исходного кода на С либо других языках программирования. Эти примеры послужат хорошей отправной точкой при разработке и тестировании таких решений.

    9.2. Настройка окружения

    В этой главе предполагается, что вы работаете на сервере под управлением ОС Windows или Linux с WebSphere MQ V6.0. Впрочем, все задачи (за исключением связанных с WebSphere MQ Explorer) могут быть выполнены удаленно на UNIX-сервере с WebSphere MQ V6.0.

    Примечание Если вы работаете с WebSphere MQ на Linux-сервере, следуйте отдельным инструкциям, приведенным ниже.

    9.2.1. Установка WebSphere MQ V6.0

    Подробнее об установке сервера WebSphere MQ см. в руководстве WebSphere MQ V6.0 Quick Beginnings для соответствующей платформы:

  • WebSphere MQ для Windows V6.0 Quick Beginnings, GC34-6476
  • WebSphere MQ для Linux V6.0 Quick Beginnings, GC34-6480
  • Установите все необходимые и дополнительные компоненты, сделайте необходимые настройки.

    9.2.2. Привилегии администратора WebSphere MQ

    Учетная запись, под которой вы входите в систему, должна иметь привилегии администратора WebSphere MQ.

  • В Windows: ваша учетная запись должна быть членом одной из следующих групп:
  • Administrators,
  • mqm.
  • В UNIX: ваша учетная запись должна быть членом группы
  • mqm.
  • 9.2.3. Доступ к примерам WebSphere MQ

    Каталог с примерами WebSphere MQ должен быть в пути поиска, заданном соответствующей переменной окружения в ОС. При установке WebSphere MQ в Windows это делается автоматически.

    Примеры WebSphere MQ устанавливаются в следующий каталог.

  • В Windows: C:\Program Files\IBM\WebSphere MQ\Tools\c\Samples\Bin
  • В UNIX (кроме IBM AIX 5L): /opt/mqm/samp/bin – добавьте этот путь к пути поиска текущего терминального сеанса, например так:
    PATH=$PATH:/opt/mqm/samp/bin
    export PATH
  • В IBM AIX 5L: /usr/mqm/samp/bin – добавьте этот путь к пути поиска текущего терминального сеанса, например так:
    PATH=$PATH:/usr/mqm/samp/bin
    export PATH
  • 9.2.4. Замечания о Java

    Действия, описанные в разделе 9.5, требуют установки пакета Java Development Kit (JDK), расположенного в каталоге prereqs на установочном носителе WebSphere MQ V6.0. Если установить JDK невозможно, упражнения, посвященные обмену сообщениями по подписке, следует пропустить.

    9.3. Обмен сообщениями с помощью локального менеджера очередей

    В этом разделе вы познакомитесь с графическим интерфейсом, а также с интерфейсом командной строки, применяемым для создания, запуска, завершения и удаления менеджеров очередей. Кроме того, вы научитесь добавлять и извлекать из очереди тестовые сообщения, а также просматривать содержимое очередей с использованием WebSphere MQ Explorer и программ-примеров WebSphere MQ.

    Ниже предполагается, что вы знакомы с интерфейсами и примерами из этого раздела.

    9.3.1. Создание менеджера очередей по умолчанию

    Ниже показано, как создать на компьютере менеджер очередей и назначить его менеджером очередей по умолчанию.

    Это делается при помощи мастера WebSphere MQ Explorer Create Queue Manager либо команды crtmqm WebSphere MQ.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queue Managers в навигаторе и выберите New\Queue Manager – откроется страница Enter Basic Values (Step 1) мастера Create Queue Manager.
  • Введите host1/qm1 в поле Queue manager name.
  • Установите параметр Make this the default queue manager.
  • Для остальных параметров примите значения по умолчанию и щелкните Next, не щелкая кнопку Finish, – откроется страница Enter log values (Step 2).
  • Оставьте на этой странице значения по умолчанию и щелкните Next, не щелкая Finish, – откроется страница Enter configuration options (Step 3).
  • Снимите флажок Start queue manager.Примечание Флажок Start queue manager позволяет автоматически выполнить действия, описанные в разделе 9.3.2.

    Параметр Auto start менеджера очередей поддерживается только в Windows и позволяет автоматически запустить менеджер очередей при перезагрузке компьютера.

  • Для остальных полей оставьте значения по умолчанию и щелкните Next, не щелкая Finish, – откроется страница Enter listener options (Step 4).Примечание Если на вашем компьютере уже есть менеджер очередей с компонентом-слушателем WebSphere MQ, привязанным к стандартному TCP/IP-порту, на этой странице может появиться сообщение "The port is already used by another WMQ Listener".
  • Снимите флажок Create listener configured for TCP/IP.Примечание Этот флажок позволяет автоматически выполнить действия, описанные в разделе 10.2.1.
  • Для остальных полей оставьте значения по умолчанию и щелкните Next, не щелкая Finish, – откроется страница Enter explorer options (Step 5).
  • Оставьте значения по умолчанию на этой странице и щелкните Finish.
  • Откроется окно Creating Queue Manager "host1/qm1" с сообщением о состоянии.Примечание Если щелкнуть Show details в этом окне, можно просматривать команды WebSphere MQ, исполняя которые WebSphere MQ Explorer создает менеджер очередей. При этом после завершения установки (выводом сообщения Finished в главном окне) окно состояния следует закрыть вручную.
  • Завершив это упражнение, убедитесь, что в окне навигатора в папке Queue Managers отображается менеджер очередей в виде значка, соответствующего остановленному локальному менеджеру очередей.
  • Применение управляющих команд WebSphere MQ

    Выполните следующую команду, чтобы создать менеджер очередей в конфигурации по умолчанию и сделать его менеджером очередей по умолчанию на данном компьютере:

    crtmqm -q host1/qm1
    Примечание В отсутствие параметра -q созданный менеджер не станет менеджером очередей по умолчанию на данном компьютере.

    Эта команда генерирует следующий вывод:

    WebSphere MQ queue manager created.
    Creating or replacing default objects for host1/qm1.
    Default objects statistics : 43 created. 0 replaced. 0 failed.
    Completing setup.
    Setup completed.

    Следующая команда позволяет проверить, создан ли менеджер очередей:

    dspmq

    Эта команда генерирует следующий вывод:

    QMNAME(host1/qm1) STATUS(Ended immediately)

    9.3.2. Запуск менеджера очередей по умолчанию

    Ниже показано, как запустить созданный ранее менеджер очередей. Это делается с помощью WebSphere MQ Explorer либо управляющих команд amqmdain/strmqm WebSphere MQ.

    В управляющих командах WebSphere MQ не обязательно указывать имя менеджера очередей, поскольку эти команды адресованы менеджеру очередей по умолчанию.

    Применение WebSphere MQ Explorer

    Щелкните правой кнопкой менеджер очередей host1/qm1 в окне навигатора и выберите Start – откроется окно, похожее на то, что отображалось во время создания менеджера очередей.

    Завершив это упражнение, убедитесь, что в окне навигатора в папке Queue Managers отображается менеджер очередей в виде значка, соответствующего работающему локальному менеджеру очередей.

    Применение управляющих команд WebSphere MQ

    Команды для UNIX и Windows отличаются следующим:

  • Windows:
    amqmdain qmgr start
    Примечание Эта команда позволяет запустить менеджер очередей так, чтобы при выходе из системы и входе в нее он не останавливался. В UNIX аналогичная команда работает, но при выходе из системы запущенный ей менеджер очередей завершается.

    В WebSphere MQ для Windows V5.3 используйте следующую команду:

    amqmdain start host1/qm1
  • UNIX:
    strmqm

    Эта команда генерирует следующий вывод:

    WebSphere MQ queue manager 'host1/qm1' starting.
    5 log records accessed on queue manager 'host1/qm1' during the log replay
    phase.
    Log replay for queue manager 'host1/qm1' complete.
    Transaction manager state recovered for queue manager 'host1/qm1'.
    WebSphere MQ queue manager 'host1/qm1' started.
  • Примечание Следующий вывод свидетельствует о том, что данный менеджер очередей не является менеджером очередей по умолчанию на этом компьютере:
    AMQ8118: WebSphere MQ queue manager does not exist.

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

  • Применение WebSphere MQ Explorer (в Windows):
  • щелкните правой кнопкой IBM WebSphere MQ в окне навигатора и выберите Properties ;
  • проверьте и при необходимости отредактируйте поле Default queue manager name. В нем должно быть следующее значение:
    host1/qm1
  • щелкните OK.
  • применение файла mqs.ini в UNIX:
  • откройте файл mqs.ini в текстовом редакторе, таком как vi или emacs. Файл mqs.ini находится в каталоге
    /var/mqm/mqs.ini
  • найдите строку
    DefaultQueueManager:
  • если эта строка не существует, добавьте ее в конце файла;
  • затем добавьте следующую строку:
    Name=host1/qm1
  • 9.3.3. Создание локальной очереди

    В этом разделе рассказывается, как определить новый объект локальной очереди в менеджере очередей. Объект локальной очереди представляет очередь, обслуживаемую менеджером очередей, в которую можно добавлять сообщения, а также получать сообщения из нее.

    Это делается с использованием WebSphere MQ Explorer либо команды MQSC DEFINE, поддерживаемой командой runmqsc. Команда runmqsc служит для отправки команд MQSC менеджеру очередей.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Раскройте значок менеджера очередей host1/qm1 в навигаторе – откроется папка Queues менеджера.
  • Щелкните правой кнопкой папку Queues и выберите New\Local Queue – откроется страница "Enter a name" (с значком в виде красного креста) мастера Create Local Queue.
  • Введите queue1 в поле Name.
  • Щелкните Next, не щелкая Finish, – откроется страница Change the properties of the new Local Queue, на которой можно задать исходные атрибуты объекта локальной очереди.
  • Введите в поле Description следующее:
    Redbook example queue1: Newly defined
  • Щелкните Finish – на некоторое время откроется индикатор хода выполнения, затем окно результатов с сообщением:
    The object was created successfully. (AMQ4148)
  • Применение команд MQSC

    Выполните следующие действия.

  • Запустите интерактивный сеанс MQSC для менеджера очередей по умолчанию следующей командой:
    runmqsc
  • После запуска интерактивный сеанс MQSC ожидает ввода, отображая мигающий курсор, и генерирует следующий вывод:
    5724-H72 (C) Copyright IBM Corp. 1994, 2004. ALL RIGHTS RESERVED.
    Starting MQSC for quew host1/qm1.
    Теперь сеанс готов к приему ввода, дополнительное сообщение о запуске сеанса не отображается.Примечание Если менеджер очередей не запустился или не назначен менеджером по умолчанию, генерируется следующий вывод и отображается обычное приглашение ОС:
    5724-H72 (C) Copyright IBM Corp. 1994, 2004. ALL RIGHTS RESERVED.
    AMQ8146: WebSphere MQ queue manager not available.
    No MQSC commands read.
    No commands have a syntax error.
    All valid MQSC commands were processed.
  • Выполните следующую команду, чтобы создать очередь:
    DEFINE QLOCAL('queue1') + DESCR('Redbook example queue1: Newly defined')
    Примечание Для использования символов в нижнем регистре в именах и описаниях важно использовать одинарные кавычки (см. пример выше).

    Заметьте, что символ "+" завершает первую строку и перед ним после скобки стоит пробел. Это позволяет создавать многострочные команды MQSC.

    Команда генерирует следующий вывод:
    AMQ8006: WebSphere MQ queue created.
    Примечание Если предпринять несколько попыток создания очереди, то попытки, следующие за успешным созданием, окончатся неудачей и выводом следующего сообщения:
    AMQ8150: WebSphere MQ object already exists.
    В этом случае добавьте к команде атрибут REPLACE, например так:
    DEFINE QLOCAL('queue1') REPLACE + DESCR('Redbook example queue1:
    Newly defined')
  • Выйдите из интерактивного сеанса MQSC, выполнив команду
    END
    Вы вернетесь в командную строку ОС, и будет сгенерирован вывод со сводкой команд, выполненных во время сеанса, например:
    END
    2 : END One MQSC command read. No commands have a syntax error. All valid MQSC
    commands were processed.
  • 9.3.4. Отображение атрибутов новой очереди

    Атрибут описания ( DESCR ) хранится в определении объекта. Все остальные атрибуты имеют значения по умолчанию. Например, для атрибута, определяющего постоянство сообщений по умолчанию ( DEFPSIST ), задано значение NO (непостоянные). Значение неизменяемого атрибута CURDEPTH, определяющего текущую длину очереди, показывает, что длина новой очереди равна нулю.

    Просмотр значения атрибутов возможен с помощью WebSphere MQ Explorer (средствами схемы WebSphere MQ Explorer) либо команды runmqsc, поддерживающей использование символов обощения и значений атрибутов в командах MQSC DISPLAY.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Выделите папку Queues в менеджере очередей host1/qm1, расположенном в папке Queue Managers навигатора.
  • В таблице отображается строка с описанием очереди queue1. В столбцах таблицы выводятся значения атрибутов очереди. Прокрутите таблицу вправо для просмотра значений атрибутов Description, Persistence и Current queue depth.
  • Можно изменять порядок столбцов по умолчанию, а также сохранять настроенный вид таблицы с помощью схем WebSphere MQ. Внизу таблицы отображается следующий текст:
    Scheme: Standard for Queues – Distributed
  • Это свидетельствует об использовании схемы столбцов по умолчанию, а также о том, что этот менеджер очередей не относитcя к числу менеджеров очередей WebSphere MQ для z/OS. Обычно термин distributed (распределенный) обозначает любые платформы, кроме мейнфреймов.

    Справа от текста находится стрелка. Щелкните ее – откроется меню со списком готовых схем, которые можно применить к таблице, а также команд для редактирования схем и управления ими.

    Щелкните Manage Schemes – откроется окно, в котором можно создать собственные или отредактировать существующие схемы для таблиц, отображающих сведения об очередях в WebSphere MQ Explorer.

    Например, можно переместить столбцы Description, Persistence и Current queue depth в начало таблицы.

    Применение команды MQSC

    Выполните следующие действия.

  • Запустите интерактивный сеанс MQSC для менеджера очередей по умолчанию следующей командой:
    runmqsc
  • Следующей командой MQSC выведите список объектов локальных очередей:
    DISPLAY QLOCAL(*)
    Вывод этой команды содержит сводку всех локальных очередей; в этом примере отображаются сведения об очереди queue1:
    AMQ8409: Display Queue details. QUEUE(queue1) TYPE(QLOCAL)
  • Исполните следующую команду MQSC для просмотра всех атрибутов этой очереди:
    DISPLAY QLOCAL('queue1') ALL
    Команда выводит значения множества атрибутов.Примечание Для использования символов в нижнем регистре в именах объектов важно использовать одинарные кавычки (см. пример выше). В противном случае вы получите сообщение об ошибке:
    AMQ8147: WebSphere MQ object QUEUE1 not found.
  • Чтобы просматривать только такие атрибуты, как постоянство по умолчанию, описание и текущая длина очереди, выполните следующую команду MQSC:
    DISPLAY QLOCAL('queue1') DEFPSIST DESCR CURDEPTH
    Эта команда генерирует следующий вывод:
    AMQ8409: Display Queue details. QUEUE(queue1) TYPE(QLOCAL) CURDEPTH(0)
    DEFPSIST(NO) DESCR(Redbook example queue1: Newly defined)
  • Выполните следующую команду, чтобы выйти из интерактивного сеанса MQSC:
    END
    Примечание Команда MQSC DISPLAY QUEUE позволяет выводить атрибуты любого объекта очереди независимо от его типа. Например, следующая команда отображает все объекты очередей, определенные в менеджере очередей:
    DISPLAY QUEUE(*)
  • 9.3.5. Модификация атрибутов объекта очереди

    Ниже рассказано, как изменить атрибуты существующего объекта очереди с помощью WebSphere MQ Explorer и команд MQSC.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Выделите папку Queues менеджера очередей host1/qm1, расположенную в папке Queue Managers навигатора.
  • Щелкните правой кнопкой строку queue1 в таблице и выберите команду Properties либо щелкните дважды эту строку – откроется окно свойств объекта локальной очереди.
  • Введите в поле Description следующий текст:
    Redbook example queue1: Altered description
  • Щелкните OK – на короткое время откроется окно с индикатором хода операции.
  • Обратите внимание на изменение атрибута-описания объекта локальной очереди в таблице очередей.
  • Применение команд MQSC

    Выполните следующие действия.

  • Запустите интерактивный сеанс MQSC для менеджера очередей по умолчанию командой
    runmqsc
  • Выполните следующую команду MQSC, чтобы изменить атрибут с описанием очереди:
    ALTER QLOCAL('queue1') + DESCR('Redbook example queue1: Altered description')
    Примечание Для использования символов в нижнем регистре в именах объектов важно использовать одинарные кавычки (см. пример выше). В противном случае вы получите сообщение об ошибке:
    AMQ8147: WebSphere MQ object QUEUE1 not found.
  • Чтобы вывести обновленный атрибут очереди, выполните следующую команду:
    DISPLAY QLOCAL('queue1') DESCR
  • Выполните следующую команду, чтобы выйти из интерактивного сеанса MQSC:
    END
  • 9.3.6. Добавление тестовых сообщений в очередь

    Ниже рассказывается, как поместить в ранее созданную очередь сообщения с произвольным текстом при помощи WebSphere MQ Explorer и программы-примера amqsput для WebSphere MQ, работающей с менеджером очередей по умолчанию на данном компьютере.

    Видно, что после добавления сообщений в очередь значение ее атрибута "текущая длина" ( CURDEPTH ) изменяется и отражает число добавленных сообщений. О просмотре этого атрибута см. в разделе 9.3.4.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Выделите папку Queues менеджера очередей host1/qm1, расположенную в папке Queue Managers в окне навигатора.
  • Щелкните правой кнопкой строку queue1 в таблице и выберите команду Put Test Message – откроется одноименное окно.
  • Введите в поле Message data текст сообщения.
  • Щелкните Put message – поле Message data опустеет. Так можно ввести несколько тестовых сообщений; после ввода каждого сообщения щелкайте Put message.
  • Щелкните Close, чтобы закрыть окно.
  • Применение программы-примера для WebSphere MQ

    Примечание Путь к каталогу с примерами программ для WebSphere MQ должен быть добавлен к пути поиска в переменных окружения ОС.

    Выполните следующие действия.

  • Выполните следующую команду:
    amqsput queue1
    Генерируется следующий вывод, после чего команда ожидает ввода пользователя:
    Sample AMQSPUT0 start
    target queue is queue1
  • Введите сообщение и нажмите клавишу Enter. Так можно ввести несколько тестовых сообщений; после ввода каждого сообщения нажимайте Enter.
  • Чтобы выйти, нажмите Enter, не вводя текста.
  • Примечание Если вы получаете сообщение об ошибке 2059 или 2058 (см. листинг ниже), проверьте, настроен ли менеджер очередей как менеджер по умолчанию (см. раздел 9.3.2) и работает ли он (командой dspmq ):
    Sample AMQSPUT0 start
    MQCONN ended with reason code 2059
    Получив сообщение, подобное следующему, проверьте имена указанной в команде очереди (включая регистр символов) и созданного объекта, о просмотре имен см. в разделе 9.3.4.
    Sample AMQSPUT0 start
    target queue is QUEUE1
    MQOPEN ended with reason code 2085
    unable to open queue for output
    Sample AMQSPUT0 end
    Для толкования кодов возврата служит команда mqrc, принимающая код как параметр. Ниже показаны примеры вывода mqrc для кодов 2058, 2059 и 2085:
    2058 0x0000080a MQRC_Q_MGR_NAME_ERROR
    2059 0x0000080b MQRC_Q_MGR_NOT_AVAILABLE
    2085 0x00000825 MQRC_UNKNOWN_OBJECT_NAME
    Другие коды возврата MQCONN, MQOPEN и MQPUT также можно расшифровать с помощью mqrc. Подробнее о кодах возврата см. в разделе "API completion and reason codes" руководства WebSphere MQ Messages, GC34-6601.

    9.3.7. Просмотр сообщений, добавленных в очередь

    Здесь рассказывается, как осуществляется просмотр сообщений, находящихся в данный момент в очереди WebSphere MQ, без их удаления. Для просмотра доступно как содержимое сообщений, так и сведения о них, хранимые в дескрипторах сообщений.

    Сообщения, добавляемые в очередь, являются непостоянными ( nonpersistent messages ). В поле reply-to queue manager сообщений автоматически записывается строка host1/qm1 менеджером, в чью очередь добавлены эти сообщения.

    Сообщения, генерация которых описана в разделе 9.3.6, представляли собой дейтаграммы, то есть сообщения, не требующие ответа.

    В силу этой причины значение reply-to queue не определялось WebSphere MQ Explorer или программой-примером amqsput при добавлении сообщения.

    Сейчас мы воспользуемся интерфейсом WebSphere MQ Explorer либо программой-примером amqsbcg для WebSphere MQ.

    Примечание Эти методы весьма удобны при разработке, тестировании и мониторинге очередей рабочих систем, поскольку такой метод просмотра никак не влияет на содержащиеся в очереди сообщения.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой очередь в таблице менеджера очередей и выберите Browse Messages – откроется окно с индикатором хода операции, а затем окно Message browser.
  • Каждая строка в таблице, отображаемой в окне Message browser, представляет одно из сообщений в очереди. В столбцах этой таблицы отображается информация о сообщении, которая находится в дескрипторе сообщения, а также содержимое или данные сообщения. Настраивая схему таблицы, можно изменять порядок столбцов, чтобы, например, переместить столбцы Persistence, Message type, Message data, Reply-to queue и Reply-to Queue Manager в начало таблицы.
  • Некоторые типы сообщений лучше просматривать в виде двоичных данных, а не текста. Для этого дважды щелкните строку таблицы, представляющую сообщение, – откроется окно свойств сообщения. Щелкните секцию Data в этом окне.
  • Применение программы-примера для WebSphere MQ

    Выполните следующие действия:

  • Выполните следующую команду для просмотра сообщений в очереди менеджера по умолчанию; вывод команды будет перенаправлен в файл queue1.txt:
    amqsbcg queue1 > queue1.txt
  • Откройте queue1.txt в любом текстовом редакторе. Для каждого из сообщений в файле содержатся сведения из дескриптора и содержимое в двоичном и текстовом (справа) представлении.
  • Читать сведения из такого файла сложнее, чем в WebSphere MQ Explorer. Разберем значение наиболее интересных полей вывода команды amqsbcg.

    MsgType : 8

    Тип 8 соответствует дейтаграммам. Запросы имеют тип 1, ответы – 2, отчеты – 4.

    Persistence : 0

    Значение "0" свидетельствует о том, что сообщение является непостоянным, а значение "1", напротив, говорит о том, что это сообщение является постоянным.

    ReplyToQ : ' '

    В этом поле отображается 48-значное имя очереди ответов (reply-to queue). Если в имени меньше 48 символов, недостающие символы заменяются пробелами, расположенными справа. Такие данные называются дополненными пробелами (blankpadded), они часто используются в структурах WebSphere MQ. В этом примере данное поле в дескрипторе сообщений пусто.

    ReplyToQMgr : 'host1/qm1 '

    Это поле содержит 48-значное дополненное пробелами имя менеджера очереди ответов (reply-to queue manager), оно автоматически заполняется менеджером очередей при размещении сообщения.

    **** Message ****
    length – 20 bytes
    00000000: 5265 6462 6F6F 6B20 7465 7374 206D 6573   'Redbook test mes'
    00000010: 7361 6765                     'sage '

    Здесь отображается содержимое сообщения в двоичном и (справа) в текстовом представлении. Это существенно облегчает просмотр содержимого некоторых типов сообщений, особенно объемных, которые проще просматривать в двоичном представлении. Впрочем, содержимое простых тестовых сообщений из наших примеров как раз удобнее просматривать в текстовом представлении.

    9.3.8. Определение и использование псевдонимов локальных очередей

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

    Атрибуты объекта псевдонима очереди определяют параметры по умолчанию, с которыми сообщения добавляются в очередь, на которую ссылается псевдоним (его целевую очередь). Так, ниже показано, что если настроить для псевдонима свойство persistent, то сообщения, добавленные через этот псевдоним, будут постоянными.

    Примечание В данном примере для наглядности в одну и ту же очередь добавляются сообщения двух типов: постоянные и непостоянные. Однако в WebSphere MQ более эффективны очереди с сообщениями одного типа, поэтому смешивать постоянные и непостоянные сообщения в одной очереди не рекомендуется.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queues в host1/qm1 и выберите New\Alias Queue – откроется страница " Enter a name " мастера New Alias Queue, помеченная красным крестиком.
  • Введите queue1.persistent в поле Name.
  • Щелкните Next, не щелкая Finish, – откроется окно настройки свойств нового псевдонима. В нем можно задать атрибуты объекта псевдонима очереди.
  • Введите queue1 в поле Base queue.Примечание В результате этого действия будет задан атрибут "целевая очередь" ( target queue, TARGQ ) объекта псевдонима очереди.
  • Введите в поле Description следующее значение:
    Redbook example alias to queue1: For persistent messages
  • Установите значение Persistent для поля Persistence.
  • Щелкните Finish, затем в окне сообщения AMQ4148 об успешном создании объекта щелкните OK.
  • Щелкните правой кнопкой новую строку в таблице Queues (queue1.persistent), выберите Put Test Message и добавьте в очередь несколько сообщений.
  • Обратите внимание, что значение атрибута "текущая длина" очереди queue1 увеличилось. Просмотрите сообщения в очереди queue1, как описано в разделе 9.3.7. Сообщения, добавленные в очередь через этот псевдоним, имеют атрибут Persistent (постоянные), тогда как ранее добавленные сообщения имеют атрибут Not Persistent (непостоянные).
  • Применение команд MQSC

    Выполните следующие действия.

  • Выполните следующую команду MQSC (с использованием runmqsc ):
    DEFINE QALIAS('queue1.persistent') TARGQ('queue1') DEFPSIST(YES) +
    DESCR('Redbook example alias to queue1: For persistent messages')
  • Проверьте атрибуты объекта псевдонима очереди при помощи следующей команды MQSC:
    DISPLAY QALIAS('queue1.persistent') TARGQ DEFPSIST DESCR
    Примечание Помните, что имя queue1 должно быть в нижнем регистре, поэтому при определении объекта псевдонима очереди важно заключать аргумент TARGQ в одинарные кавычки.
  • Выйдите из runmqsc командой END, затем добавьте к очереди несколько тестовых сообщений через псевдоним с помощью программы-примера для WebSphere MQ (передача пустой строки вызывает завершение программы):
    amqsput queue1.persistent
  • Просмотрите сообщения в очереди, как описано в разделе 9.3.7. Обратите внимание, что новые сообщения являются постоянными, а прежние (добавленные напрямую, без псевдонима) – нет.
  • 9.3.9. Завершение и перезапуск менеджера очередей

    Ниже рассказывается, как остановить менеджер очередей с помощью WebSphere MQ Explorer или команды endmqm. Далее вы перезапустите менеджер очередей и просмотрите сообщения в очереди. Сообщения, являющиеся непостоянными, исчезнут, а постоянные – останутся в очереди.

    При этом будет выполнена т. н. "плавная" остановка менеджера очередей, во время которой он уведомляет об остановке все подключенные к нему приложения, но не прекращает принимать от них запросы.

    Примечание Также возможна немедленная остановка менеджера очередей, при которой он завершает только текущие операции, но не выполняет больше никаких действий. Этот метод используется, если работа менеджера очередей не завершается слишком долго. Немедленное завершение работы менеджера очередей возможно и во время его "плавной" остановки.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой значок менеджера очередей в папке Queue Managers и выберите команду Stop – откроется окно End Queue Manager.
  • В этом окне оставьте переключатель в положении Controlled.Примечание Управляемое завершение (controlled end) менеджера очередей в WebSphere MQ Explorer аналогично завершению командой endmqm и выполняет "плавную" остановку с выводом окна состояния до окончания остановки менеджера очередей.
  • Дождитесь завершения остановки (см. окно состояния). Заметьте, что теперь для менеджера очередей отображается значок остановленного локального менеджера очередей.
  • Перезапустите менеджер очередей, щелкнув его правой кнопкой и выбрав команду Start. Дождитесь завершения запуска (см. окно состояния).
  • Изучите содержимое очереди queue1. Обратите внимание, что в ней остались лишь постоянные сообщения, добавленные ранее при помощи псевдонима очереди.
  • Применение управляющих команд WebSphere MQ

    Выполните следующие действия.

  • Следующая команда завершает менеджер очередей, вызывая его "плавную" остановку:
    endmqm -w host1/qm1
    Примечание Команда endmqm требует указывать имя менеджера очередей, даже если она адресована менеджеру очередей по умолчанию. Это позволяет избежать случайной остановки менеджера очередей по умолчанию.

    Другой синтаксис команды endmqm имеет следующий вид:

    endmqm имя_менеджера_очередей

    При вызове без дополнительных параметров эта команда инициирует "плавную" остановку и сразу возвращает управление. Команда dspmq позволяет увидеть, когда остановится менеджер очередей.

    Следующая команда немедленно останавливает менеджер очередей:

    endmqm -i имя_менеджера_очередей
  • Для перезапуска менеджера очередей используется команда amqmdain qmgr start (в Windows) либо strmqm (в UNIX), см. раздел 9.3.2.
  • Просмотрите сообщения в очереди queue1, как описано в разделе 9.3.7. Заметьте, что в очереди остались только постоянные сообщения.
  • Примечание Можно настроить отдельную локальную очередь так, чтобы при перезапуске менеджера очередей не потерять непостоянные сообщения. Для этого необходимо воспользоваться значением High атрибута класс NPM (NPMCLASS), который задают в секции Storage окна свойств очереди. Можно выполнить эти действия сейчас над очередью queue1.

    Однако такие настройки не эквивалентны использованию постоянных сообщений. WebSphere MQ не регистрирует в журнале операции над непостоянными сообщениями и не восстанавливает их после сбоев менеджера очередей. Следовательно, сообщения в очередях класса High все равно могут быть потеряны. Поэтому данные, критичные для бизнеса, непременно должны быть помечены как постоянные.

    9.3.10. Извлечение сообщений из очереди

    Ниже рассказывается, как извлечь сообщения из очереди WebSphere MQ, при этом извлекаемые сообщения удаляются из очереди. Любое сообщение может быть успешно извлечено из очереди только одним приложением. Разберем это с использованием программ-примеров для WebSphere MQ.

    Выполните следующие действия:

  • Если в очереди queue1 не осталось сообщений, добавьте в нее несколько тестовых сообщений (напрямую либо через псевдоним).
  • Следующая команда извлекает все сообщения из очереди менеджера очередей по умолчанию:
    amqsget queue1

    Для каждого из сообщений в очереди эта команда выводит на экран строку, перед завершением программа ожидает добавления новых сообщений в течение 10 секунд. Если за это время в очередь будут добавлены новые сообщения, программа немедленно выводит их на экран и ожидает следующие 10 секунд.

    Вывод программы-примера выглядит так:

    Sample AMQSGET0 start
    message <Redbook test message 1>
    message <Redbook test message 2>
    message <Redbook test message 3>
    no more messages
    Sample AMQSGET0 end
  • Обратите внимание, что после завершения этой программы в очереди не останется сообщений. В этом можно убедиться путем просмотра содержимого очереди.
  • 9.3.11. Удаление объекта очереди

    Ниже рассказывается, как удалить объект очереди на примере ранее созданного объекта псевдонима. Это делается при помощи WebSphere MQ Explorer либо команды MQSC DELETE.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой объект псевдонима очереди, queue1.persistent, в таблице менеджера очередей и выберите Delete – система запросит подтверждение.
  • Пометьте флажком имя удаляемого объекта и щелкните Yes.
  • После того как окно состояния закроется, система вновь запросит подтверждение. Щелкните OK.
  • Обратите внимание на отсутствие удаленного объекта в таблице менеджера очередей.
  • Применение команд MQSC.

    Выполните следующие действия.

  • Выполните следующую команду MQSC (из-под runmqsc ):
    DELETE QALIAS('queue1.persistent')
    Генерируется следующий вывод:
    AMQ8007: WebSphere MQ queue deleted.
  • Заметьте, что объект удаленной очереди больше не отображается следующими командами MQSC:
    DISPLAY QUEUE(*)
    DISPLAY QALIAS(*)
  • 9.3.12. Создание псевдонима для менеджера очередей с использованием объекта удаленной очереди

    Псевдоним менеджера очередей лишь один из примеров объектов удаленных очередей, создаваемых при помощи WebSphere MQ Explorer или команды MQSC DEFINE QREMOTE.

    Примечание Псевдоним менеджера очередей – это объект удаленной очереди, у которого атрибут "имя удаленной очереди" пуст (не имеет значения). Подробнее его использование освещается в разделе 10.3.12.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queues менеджера host1/qm1 и выберите New\Remote Queue – откроется страница "Enter a name" мастера New Remote Queue, помеченная красным крестиком.
  • Введите host1/qm1.alias в поле Name.
  • Щелкните Next, не щелкая Finish, – откроется страница Change the properties of the new Alias Queue, на которой можно задать атрибуты псевдонима очереди.
  • Введите host1/qm1 в поле Remote Queue Manager.
  • В поле Description введите следующее значение:
    Redbook example queue manager alias to host1/qm1
  • Щелкните Finish, затем щелкните OK в окне сообщения AMQ4148 (об успешном создании объекта).
  • Применение команд MQSC

    Выполните следующие действия.

  • Выполните следующую команду MQSC (из-под runmqsc ):
    DEFINE QREMOTE('host1/qm1.alias') RNAME('') RQMNAME('host1/qm1') +
    DESCR('Redbook example queue manager alias to host1/qm1')
  • Проверьте атрибуты объекта удаленной очереди, представляющего псевдоним менеджера очередей, с помощью команды MQSC следующего вида:
    DISPLAY QREMOTE('host1/qm1.alias') RNAME RQMNAME DESCR
    Примечание Помните: имя host1/qm1 должно вводиться в нижнем регистре, поэтому важно заключить аргумент RQMNAME в одинарные кавычки при объявлении объекта псевдонима очереди.
  • 9.3.13. Указание менеджера очередей при обращении к очереди

    Ниже рассказывается, как указать нужный менеджер очередей, чтобы открыть очередь и поместить в нее сообщения. Для этого применяются программы-примеры WebSphere MQ. Следующий пример иллюстрирует гибкость различных типов объектов очередей при управлении разрешением имен очередей.

    Программы-примеры для WebSphere MQ поддерживают широкий спектр функций и параметров, в этом примере мы рассмотрим дополнительные функции программы-примера amqsput.

    Примечание Использованная в этом примере команда удобна для проверки маршрутов к удаленным менеджерам очередей. Для этого через локальный менеджер очередей отправляют тестовые сообщения на имя удаленного менеджера очередей.

    Применение программ-примеров WebSphere MQ

    Выполните следующие действия.

  • Запустите программу-пример для WebSphere MQ следующим образом и добавьте в очередь несколько сообщений:
    amqsput queue1 host1/qm1 8208 0 host1/qm1.alias
    Программу-пример здесь вызывают со следующими параметрами:
  • queue1 – имя очереди;
  • host1/qm1 – имя менеджера очередей, к которому подключаются для отправки сообщений;
  • 8208 – десятичный код параметров запроса, который должен быть передан при вызове MQOPEN (для данного примера это не важно). Такой вызов заставляет открыть очередь сообщений для записи с целью добавления в нее сообщений и приводит к неудаче последующие попытки добавить сообщения, если менеджер очередей находится в процессе "плавной остановки");
  • 0 – код, определяющий вызов MQCLOSE без параметров (не важно для данного примера);
  • host1/qm1.alias – имя объекта менеджера очередей, заданное при вызове MQOPEN (дополнительный параметр, используемый в этом примере). Оно соответствует ранее объявленному псевдониму менеджера очередей, а не менеджеру очередей, к которому приложение подключено напрямую. Механизм разрешения имен очередей преобразует эту ссылку в имя локального менеджера очередей ( host1/qm1 ) через псевдоним менеджера очередей.
  • Примечание Если уничтожить объект удаленной очереди, представляющий псевдоним менеджера очередей, неверно задать имя менеджера очередей (оно чувствительно к регистру) либо значение атрибута удаленной очереди или допустить ошибку при вызове команды amqsput, вызов MQOPEN завершится с кодом 2087 MQRC_UNKNOWN_REMOTE_Q_MGR.
  • Просмотрите содержимое queue1. Вы увидите, что сообщения доставлены в очередь queue1, обслуживаемую менеджером host1/qm1, включая сообщения, переданные через псевдоним host1/qm1.alias.
  • 9.3.14. Удаление менеджера очередей

    Ниже демонстрируется удаление менеджера очередей. Менеджер очередей удаляется вместе со всеми его очередями и сообщениями, восстановление их средствами WebSphere MQ невозможно. Эта операция осуществляется при помощи WebSphere MQ Explorer либо управляющей команды dltmqm.

    Примечание Команда dltmqm WebSphere MQ не запрашивает подтверждение перед удалением менеджеров очередей, отменить ее также невозможно. Поэтому пользуйтесь данной командой с осторожностью.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Если менеджер очередей host1/qm1 работает, щелкните его правой кнопкой и выберите Stop, чтобы остановить этот менеджер очередей.
  • Выберите метод остановки и щелкните OK – откроется окно состояния. Когда оно закроется, щелкните правой кнопкой менеджер очередей host1/qm1 в дереве навигатора и выберите Delete.
  • Проверьте имя удаляемого менеджера очередей в окне запроса подтверждения. Если все в порядке, щелкните Yes, чтобы удалить менеджер, в противном случае щелкните No для возврата в WebSphere MQ Explorer. При выборе удаления откроется окно состояния.
  • По завершении операции окно состояния закроется – менеджер очередей будет удален, он также исчезнет из дерева объектов навигатора.
  • Применение управляющих команд WebSphere MQ

    Выполните следующие действия.

  • Остановите менеджер очередей (см. раздел 9.3.9), например такой командой:
    endmqm -w host1/qm1
  • После остановки менеджер очередей можно удалить следующей командой:
    dltmqm host1/qm1
  • Примечание Подобно команде endmqm, команда dltmqm требует указывать имя менеджера очередей, даже при удалении менеджера очередей по умолчанию.

    9.4. Создание служб обработки запросов и ответов на основе очереди

    Ниже рассказывается о размещении служб на базе менеджера очередей, обеспечивающем интерфейс запрос-ответ для очереди. Среди прочего освещаются настройка триггеров для автоматического запуска службы при добавлении сообщения в очередь с использованием программ-примеров из WebSphere MQ.

    9.4.1. Создание и запуск менеджера очередей – основы службы

    Ниже показано, как создать менеджер очередей host1/echo.hub, который выступит в роли основы для службы, которая возвращает в составе ответа текст, пришедший в составе запроса.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queue Managers и выберите New\Queue Manager.
  • Введите host1/echo.hub в поле Queue manager name.
  • Снимите флажок Make this queue manager the default queue manager.
  • Щелкните Next.
  • Щелкните Next, чтобы принять параметры ведения журнала, заданные по умолчанию.
  • Пометьте флажок Start queue manager – это необходимо для автоматического запуска менеджера очередей.
  • Щелкните Next.
  • Снимите флажок Create listener configured for TCP/IP.
  • Щелкните Finish.
  • Применение управляющих команд WebSphere MQ

    Выполните следующие действия.

  • Создайте менеджер очередей, не делая его менеджером очередей по умолчанию, при помощи следующей команды:
    crtmqm host1/echo.hub
  • Запустите менеджер очередей следующей командой:
  • в Windows:
    amqmdain qmgr start host1/echo.hub
  • в UNIX:
    strmqm host1/echo.hub
  • 9.4.2. Создание очереди-основы службы

    Ниже рассказывается о создании объекта локальной очереди, который в дальнейшем станет основой службы, запускающейся для обработки поступающих запросов. Это делается с использованием WebSphere MQ Explorer либо команд MQSC. Атрибуты этой очереди имеют значения по умолчанию и запросы, поступающие в эту очередь, являются непостоянными.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queues менеджера очередей host1/echo.hub и выберите команду New\Local Queue.
  • Введите echo в поле Name.
  • Щелкните Next.
  • В поле Description введите следующее значение:
    Queue hosting the echo service
  • Щелкните Finish.
  • Применение команд MQSC

    Выполните следующую команду MQSC, адресованную менеджеру host1/echo.hub:

    DEFINE QLOCAL('echo') +
     DESCR('Queue hosting the echo service')

    9.4.3. Ручное объявление очереди ответов

    Ниже рассказывается, как вручную создать объект локальной очереди, которую запрашивающее приложение будет использовать для получения ответов. Это делается с использованием WebSphere MQ Explorer либо команд MQSC. Атрибуты очереди ответов имеют значения по умолчанию.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queues менеджера host1/echo.hub и выберите New\Local Queue.
  • Введите echo.replies.manual в поле Name.
  • Щелкните Next.
  • Введите в поле Description следующее значение:
    Manually defined reply-to queue for echo service
  • Щелкните Finish.
  • Применение команд MQSC

    Примечание Поскольку host1/echo.hub не является менеджером очередей по умолчанию, для запуска интерактивного сеанса MQSC применяется следующая команда:
    runmqsc host1/echo.hub
    Помните: для завершения интерактивного сеанса MQSC используется команда END.

    Выполните следующую команду MQSC для менеджера host1/echo.hub:

    DEFINE QLOCAL('echo.replies.manual') + DESCR('Manually defined reply-to queue
    for echo service')

    9.4.4. Добавление и анализ тестового запроса

    Ниже рассказывается, как добавить тестовое сообщение с запросом. Также вы узнаете, как изучить это сообщение, чтобы понять его отличие от сообщения-дейтаграммы. Для этого вы воспользуетесь программами-примерами WebSphere MQ. О просмотре очередей см. в разделе 9.3.7.

    Выполните следующие действия:

  • Выполните команду amqsreq, вызывающую одноименную программу–пример WebSphere MQ:
    amqsreq echo host1/echo.hub echo.replies.manual
    Примечание Эту команду вызывают со следующими параметрами:
  • echo – имя очереди-основы службы, предоставляющей интерфейс запрос-ответ; в настоящее время активных служб, обрабатывающих сообщения в этой очереди, нет;
  • host1/echo.hub – имя менеджера очередей, к которому подключается запрашивающее приложение;
  • echo.replies.manual – имя очереди ответов, которое запрашивающее приложение указывает в дескрипторах сообщений с запросами; запрашивающее приложение ожидает поступления ответов в эту очередь.
  • Первоначально эта команда генерирует следующий вывод:
    Sample AMQSREQ0 start
    server queue is echo
    replies to echo.replies.manual
    Примечание Следите за регистром имен очередей в MQSC и WebSphere MQ Explorer, а также параметров этой команды. При возврате неожиданного кода завершения воспользуйтесь командой mqrc, чтобы получить его понятное описание в текстовой форме.
  • Добавьте несколько сообщений через эту команду. После ввода каждого из сообщений нажимайте Enter. Чтобы прекратить отправку сообщений, нажмите Enter, не вводя ничего, – после этого программа в течение 10 секунд будет ожидать поступления ответов. На этот раз ответы не приходят, поскольку служба еще не настроена.
  • Изучите сообщения, добавленные в эхо-очередь (очередь с ответами), обращая внимание на:
  • тип сообщения ( MsgType ): это запрос (код 1);
  • имя эхо-очереди ( echo.replies.manual );
  • менеджер очередей, обслуживающий эхо-очередь ( host1/echo.hub );
  • при использовании WebSphere MQ Explorer выберите секцию Identifiers в окне свойств сообщения. Обратите внимание на то, что идентификатор сообщения ( MsgId ) представлен уникальным значением, сгенерированным WebSphere MQ;
  • также заметьте, что поле корреляционного идентификатора ( CorrelId ) пусто.
  • 9.4.5. Очистка очереди-основы службы

    Ниже рассказывается, как очистить очередь – основу службы. Это необходимо, чтобы сообщения, ранее добавленные в очередь, не помешали генерации (с использованием правил срабатывания, triggering rules) триггерных сообщений WebSphere MQ в ответ на поступление последующих сообщений. Если при выполнении последующих упражнений у вас возникнут проблемы, возможно, описанные ниже действия помогут устранить их.

    Примечание Эти действия не обязательны; помните также, что в реальной среде очистка очереди запросов может привести к потере важных данных.

    Это упражнение можно выполнить с использованием WebSphere MQ Explorer или команд MQSC.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Выберите папку Queues менеджера host1/echo.hub.
  • Щелкните правой кнопкой в таблице строку очереди echo и выберите Clear Messages.
  • В окне Clear queue оставьте флажок Queue will be cleared with the CLEAR command и щелкните Clear.
  • Заметьте, что теперь значение атрибута "текущая длина очереди" равно нулю.
  • Применение команд MQSC

    Выполните следующую команду MQSC в отношении менеджера host1/echo.hub:

    CLEAR QLOCAL('echo')

    9.4.6. Создание определения процесса для службы

    Ниже демонстрируется организация службы обработки запросов и ответов, работающей на базе очереди echo, с применением программы-примера amqsech. Эта программа предназначена для запуска с помощью триггеров WebSphere MQ.

    Далее рассказывается, как создать определение процесса, необходимого для запуска amqsech – приложения-примера WebSphere MQ, представляющего требуемую службу. Это делается с использованием WebSphere MQ Explorer или команд MQSC.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Process Definitions в менеджере host1/echo.hub и выберите New\Process Definition.Примечание Эта папка находится в папке Advanced менеджера очередей (см. окно навигатора).
  • Введите amqsech в поле Name.
  • Щелкните Next.
  • Введите следующий текст в поле Description:
    The amqsech WebSphere MQ sample program
  • Выберите подходящее значение параметра Application type:
  • в Windows: Windows NT ;
  • в UNIX: Unix.
  • Введите путь к приложению:
  • в Windows:
    C:\Program Files\IBM\WebSphere MQ\Tools\c\samples\bin\amqsech.exe
  • В UNIX (кроме AIX 5L):
    C:\Program Files\IBM\WebSphere MQ\Tools\c\samples\bin\amqsech.exe
    /opt/mqm/samp/bin/amqsech
  • В AIX 5L:
    /usr/mqm/samp/bin/amqsech
  • Щелкните Finish.
  • Применение команд MQSC

    Выполните следующие действия.

  • Выполните следующую команду MQSC для менеджера host1/echo.hub:
  • в Windows:
    DEFINE PROCESS('amqsech') + DESCR('The amqsech WebSphere MQ sample program') +
    APPLTYPE(WINDOWSNT) +
    APPLICID('C:\Program Files\IBM\WebSphere MQ\Tools\c\samples\bin\amqsech.exe')
  • в UNIX (кроме AIX 5L):
    DEFINE PROCESS('amqsech') + DESCR('The amqsech WebSphere MQ sample program') +
    APPLTYPE(UNIX) APPLICID('/opt/mqm/samp/bin/amqsech')
  • в AIX 5L:
    DEFINE PROCESS('amqsech') + DESCR('The amqsech WebSphere MQ sample program') +
    APPLTYPE(UNIX) APPLICID('/usr/mqm/samp/bin/amqsech')
  • Выполните следующую команду MQSC для просмотра атрибутов объекта определения процесса:
    DISPLAY PROCESS('amqsech')
  • Примечание Следите за регистром атрибутов и имени процесса в объекте определения. На платформах UNIX путь также чувствителен к регистру.

    9.4.7. Создание очереди инициации

    Ниже рассказывается, как создать локальную очередь с атрибутами по умолчанию, которая впоследствии станет очередью инициации, принимающей триггерные сообщения для очереди echo. Это делается при помощи WebSphere MQ Explorer либо команд MQSC.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queues в менеджере host1/echo.hub и выберите New\Local Queue.
  • Введите echo.initq в поле Name.
  • Щелкните Next.
  • Введите в поле Description следующий текст:
    Initiation queue for triggering the echo service
  • Щелкните Finish.
  • Применение команд MQSC

    Выполните следующую команду MQSC в отношении менеджера host1/echo.hub:

    DEFINE QLOCAL('echo.initq') + DESCR('Initiation queue for triggering the echo
    service')

    9.4.8. Активация триггера для очереди-основы службы

    Ниже описывается активация триггера для очереди echo. В данном примере используется триггер типа first, генерирующий триггерное сообщение при поступлении в очередь первого сообщения.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Выберите папку Queues менеджера host1/echo.hub.
  • Щелкните правой кнопкой в таблице строку очереди echo и выберите Properties.
  • Перейдите в секцию Triggering.
  • В поле Trigger control установите значение On.
  • Назначьте параметру Trigger type значение First.
  • Введите echo.initq в поле Initiation queue.
  • Введите amqsech в поле Process name.
  • Щелкните OK.
  • Применение команд MQSC

    Выполните следующие действия.

  • Выполните следующую команду MQSC в отношении менеджера host1/echo.hub:
    ALTER QLOCAL('echo') + TRIGGER TRIGTYPE(FIRST) INITQ('echo.initq') +
    PROCESS('amqsech')
  • Проверьте атрибуты объекта очереди следующей командой MQSC:
    DISPLAY QLOCAL('echo') TRIGGER TRIGTYPE INITQ PROCESS
    Примечание Убедитесь, что выбран верный регистр для атрибутов.
  • 9.4.9. Запуск триггерного монитора WebSphere MQ

    Ниже рассказывается, как запустить триггерный монитор WebSphere MQ, отслеживающий поступление триггерных сообщений в ранее созданную очередь инициации echo.initq.

    Выполните следующие действия.

  • Откройте окно командной строки либо запустите новый терминальный сеанс (запустив триггерный монитор, не останавливайте его – он еще потребуется при изучении этой главы; если монитор по каким-то причинам остановится, перезапустите его, как описано ниже. Чтобы остановить монитор, активируйте окно командной строки или сеанс, в котором он работает, и нажмите Ctrl+C ).
  • Выполните следующую команду, чтобы запустить триггерный монитор WebSphere MQ для менеджера очередей host1/echo.hub и очереди инициации echo.initq:
    runmqtrm -m host1/echo.hub -q echo.initq
    После запуска эта команда генерирует следующий вывод:
    5724-H72 (C) Copyright IBM Corp. 1994, 2004. ALL RIGHTS RESERVED. WebSphere MQ
    trigger monitor started.
    Waiting for a trigger message
  • 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
  • Примечание Если вы столкнулись с трудностями, проверьте атрибуты всех объявленных ранее объектов, а также регистр имен объектов, параметры команд (включая параметры триггерного монитора WebSphere MQ).

    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, чтобы проверить свойства созданного объекта:
    DISPLAY QMODEL('echo.replies.tempdyn') DESCR DEFTYPE
    Обратите внимание на тип определения (атрибут DEFTYPE ): он является временным и динамическим ( TEMPDYN ).
  • 9.4.12. Отправка запроса с использованием временной динамической очереди ответов

    Ниже рассказывается, как запросить службу (см. раздел 9.4.10). При этом в командной строке вызова amqsreq в качестве приемника ответов задана модельная очередь echo.replies.tempdyn.

    Когда программа amqsreq открывает модельную очередь, менеджер очередей автоматически создает временную динамическую очередь на основе атрибутов объекта модельной очереди echo.replies.tempdyn. По завершении программы amqsreq менеджер очередей автоматически удаляет этот объект. Если программа завершена досрочно, например нажатием Ctrl+C во время обработки, удаление будет выполнено через несколько секунд после остановки amqsreq.

    Выполните следующие действия.

  • Запустите amqsreq следующей командой:
    amqsreq echo host1/echo.hub echo.replies.tempdyn
    Программа генерирует следующий вывод:
    Sample AMQSREQ0 start
    server queue is echo
    replies to AMQ.42DD88DE02C70120
    где AMQ.42DD88DE02C70120 – имя динамической очереди.
  • Изучите свойства временной динамической очереди следующим образом.
  • С помощью WebSphere MQ Explorer:
  • Выберите папку Queues менеджера очередей host1/echo.hub.
  • Включите в WebSphere MQ Explorer отображение временных очередей (см. рис 9.1).(рис 9.1) Отображение временных очередей в WebSphere MQ Explorer
  • Обратите внимание на идентичность описания динамической очереди и объекта модельной очереди, на основе которого она создана.
  • Примечание Временные динамические очереди, имена которых начинаются с AMQ.MQEXPLORER, созданы WebSphere MQ Explorer на основе модельной очереди SYSTEM.MQEXPLORER.REPLY.MODEL. WebSphere MQ Explorer использует интерфейс запросов и ответов, поддерживаемый командными серверами менеджеров очередей.
  • С помощью команд MQSC.
  • Выполните следующую команду MQSC в отношении менеджера host1/echo.hub:
    DISPLAY QL('AMQ.*') DEFTYPE DESCR
  • Заметьте, что значение атрибута "описание" ( DESCR ) динамической очереди идентично описанию объекта модельной очереди, на основе которого была создана эта очередь.
  • Заметьте, что с приложением amqsreq работают так же, как с очередью, объявленной вручную.
  • Обратите внимание, что после завершения приложения amqsreq временная динамическая очередь удаляется автоматически.
  • Примечание Приложение-пример amqsreq не поддерживает постоянные динамические очереди, поскольку оно не позволяет указать параметры, необходимые для удаления очереди после того, как она будет закрыта. Однако можно поэкспериментировать с модельными очередями, объявленными как постоянные динамические очереди (тип определения – PERMDYN ), и программой amqsreq. Временные очереди этого типа необходимо удалять вручную с помощью WebSphere MQ Explorer или команд MQSC.

    9.5. Рассылка сообщений по подписке в WebSphere MQ с помощью JMS

    В этом разделе демонстрируется применение брокера публикации-подписки (publish/subscribe broker) WebSphere MQ с примерами кода для WebSphere MQ JMS (Java Message Service).

    Примечание Для изучения этого раздела необходимо установить пакет Java Development Kit (JDK). JDK 1.4.2 находится в каталоге Prereqs на установочном носителе WebSphere MQ V6.0.

    Каталог с исполняемыми файлами java и javac из JDK необходимо добавить к пути ОС.

    Пример кода для WebSphere MQ JMS потребуется слегка изменить, а затем скомпилировать. Однако знать язык программирования Java для этого не обязательно.

    9.5.1. Настройка среды JMS

    Создайте на компьютере, на котором предполагается работать с примерами кода, каталог – в нем будут размещены все файлы и каталоги, необходимые для выполнения описанных ниже действий. Все команды и терминальные сеансы должны работать с этим каталогом.

    Исполняющая среда Java Runtime Environment (JVM), в которой работают Java-приложения, ищет скомпилированные компоненты Java-приложений в каталоге class path, заданном соответствующей переменной окружения.

    При установке WebSphere MQ в Windows путь к компонентам, необходимым для исполнения приложений WebSphere MQ JMS, автоматически добавляется к переменной пути к классам Java, а на платформах UNIX это придется сделать вручную с помощью текущей оболочки.

    Далее предполагается, что независимо от платформы рабочий каталог добавлен в путь к классам Java.

    Для этого выполните следующие действия (в каждом окне командной строки или терминальном окне, где будут выполняться описанные ниже упражнения).

  • В Windows:
  • Перейдите в рабочий каталог, например:
    C:
    cd \wmq_redbook\jmspubsub
  • Выполните следующую команду, чтобы добавить путь к текущему каталогу в путь к классам Java:
    set CLASSPATH=%CLASSPATH%;.
  • В UNIX:
  • Перейдите в рабочий каталог, например так:
    cd ~/wmq_redbook/jmspubsub
  • Выполните следующую команду (с синтаксисом, принятым на вашей UNIX-платформе; не забудьте пробел между знаками "." и "/"):
  • В UNIX (кроме AIX 5L):
    . /opt/mqm/java/bin/setjmsenv
  • В AIX 5L:
    . /usr/mqm/java/bin/setjmsenv
  • Выполните следующую команду, чтобы добавить текущий каталог (а также дополнительный пакет Jar, не добавленный setjmsenv ) в путь к классам Java.
  • В UNIX (кроме AIX 5L):
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/jms.jar:.
    export CLASSPATH
  • В AIX 5L:
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/jms.jar:.
    export CLASSPATH
  • Примечание Если при выполнении описанных ниже упражнений вы столкнулись с ошибками, например:
    Exception in thread "main" java.lang.NoClassDefFoundError
    попробуйте устранить их, выполнив следующие действия. Настройте переменные окружения CLASSPATH вручную, например так.
  • В UNIX (кроме AIX 5L):
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/com.ibm.mq.jar
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/com.ibm.mqjms.jar
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/connector.jar
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/jms.jar CLASSPATH=$CLASSPATH:/
    opt/mqm/java/lib/jndi.jar CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/jta.
    jar CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/providerutil.jar
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/fscontext.jar
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/ldap.jar CLASSPATH=$CLASSPATH:.
    export CLASSPATH
  • В AIX 5L:
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/com.ibm.mq.jar
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/com.ibm.mqjms.jar
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/connector.jar
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/jms.jar CLASSPATH=$CLASSPATH:/
    usr/mqm/java/lib/jndi.jar CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/jta.
    jar CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/providerutil.jar
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/fscontext.jar
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/ldap.jar CLASSPATH=$CLASSPATH:.
    export CLASSPATH
  • 9.5.2. Создание и запуск менеджера очередей

    Прежде всего необходимо создать и запустить менеджер очередей host1/jmspubsub, обеспечивающий доступ к брокеру публикации-подписки.

    Это делается с помощью управляющих команд WebSphere MQ или WebSphere MQ Explorer (см. раздел 9.4.1).

    9.5.3. Запуск брокера на менеджере очередей

    WebSphere MQ V6.0 поддерживает объект службы, который создается в менеджере очередей и позволяет запустить брокер публикации-подписки на этом менеджере.

    Брокер публикации-подписки WebSphere MQ не запускается по умолчанию. Однако его можно настроить для запуска вместе с менеджером очередей. Это делается с помощью WebSphere MQ Explorer и команд MQSC.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Выберите папку Services менеджера очередей host1/jmspubsub.
  • Щелкните значок, включающий отображение системных объектов, если это еще не сделано (см. рис 9.2).
  • Щелкните правой кнопкой службу SYSTEM.BROKER и выберите команду Properties.
  • Установите для поля Service значение Queue manager, чтобы брокер публикации-подписки запускался вместе с менеджером очередей.
  • Щелкните OK.
  • Щелкните правой кнопкой службу SYSTEM.BROKER и выберите Start, чтобы запустить брокер.
  • (рис 9.2) Отображение системных объектов в WebSphere MQ Explorer

    Применение команд MQSC

    Выполните следующие действия.

  • Чтобы настроить брокер публикации-подписки WebSphere MQ для запуска вместе с менеджером очередей, выполните следующую команду MQSC в отношении менеджера host1/jmspubsub:
    ALTER SERVICE('SYSTEM.BROKER') CONTROL(QMGR)
  • Чтобы запустить брокер публикации-подписки, выполните следующую команду MQSC в отношении менеджера host1/jmspubsub:
    START SERVICE('SYSTEM.BROKER')
  • 9.5.4. Настройка менеджера очередей для работы с JMS

    WebSphere MQ требует некоторой настройки менеджера очередей, чтобы последний смог работать с JMS-приложениями и использовать возможности брокера публикации-подписки.

    Для этого поставляется специальный сценарий MQSC. Выполните его над менеджером очередей host1/jmspubsub, как показано ниже.

  • В Windows (команда вводится как одна строка):
    runmqsc host1/jmspubsub < "C:\Program Files\IBM\WebSphere MQ \Java\bin\MQJMS_
    PSQ.mqsc"
  • В UNIX (кроме AIX 5L):
    runmqsc host1/jmspubsub < /opt/mqm/java/bin/MQJMS_PSQ.mqsc
  • В AIX 5L:
    runmqsc host1/jmspubsub < /usr/mqm/java/bin/MQJMS_PSQ.mqsc
  • 9.5.5. Настройка простого JMS-провайдера

    JMS – стандартный интерфейс, который поддерживается не только WebSphere MQ. Поэтому операции, специфичные для WebSphere MQ, необходимо сопоставить с операциями, описанными в стандарте JMS.

    Приложения могут оперативно получать сведения о таких сопоставлениях, запрашивая из каталога информацию о том, как предоставляется доступ к JMS. Этот каталог – не обязательно каталог файловой системы, он может быть распределенной системой. Часто в производственной среде такой каталог находится на сетевом сервере LDAP (Lightweight Directory Access Protocol). Такая конфигурация позволяет оперативно вносить изменения. Приложения, использующие JMS, запрашивают сведения о доступе к JMS из каталога через интерфейс под названием JNDI (Java Naming and Directory Interface™).

    В приведенном ниже простом примере для хранения подобной информации в файловой системе создается каталог, далее подготавливается его содержимое при помощи средств WebSphere MQ JMS Administration tool.

    Для работы с WebSphere MQ JMS Administration tool необходимо сделать следующее.

  • В рабочем каталоге, созданном для этого примера, создайте следующий каталог (но не переходите в него):
    jms.provider
  • Создайте в рабочем каталоге файл JMSAdmin.config следующего содержания:
    INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory PROVIDER_
    URL=file:jms.provider SECURITY_AUTHENTICATION=none
    Этот файл служит для настройки инструмента JMS Administration tool с целью подготовки содержимого созданного ранее каталога файловой системы.
  • 9.5.6. Настройка JMS с помощью JMS Administration tool

    Инструмент WebSphere MQ JMS Administration tool создает объекты в каталоге, доступном через интерфейс JNDI. По завершении настройки этот каталог станет доступным приложениям, которые работают c WebSphere MQ и JMS через JNDI. Эти приложения смогут настраивать доступ к JMS, предоставляемый им WebSphere MQ.

    Синтаксис команд WebSphere MQ JMS Administration tool аналогичен таковому у команд MQSC, только имена объектов и атрибутов в нижнем регистре не обязательно заключать в одинарные кавычки.

    Подробнее о WebSphere MQ JMS Administration tool и соответствующих объектах см. WebSphere MQ V6.0 Using Java, SC34-6591.

    Ниже рассказывается, как создать объект Topic Connection Factory, определяющий способ подключения JMS-приложения к провайдеру функций обмена сообщений по принципу публикации-подписки (publish/subscribe), а также объект Topic, определяющий "тему", в которой приложения смогут публиковать свои сообщения и подписываться на получение сообщений этой темы.

    Выполните следующие действия.

  • Запустите инструмент WebSphere MQ JMS Administration tool:
  • в Windows:
    "C:\Program Files\IBM\WebSphere MQ\Java\Bin\JMSAdmin.bat"
  • в UNIX (кроме AIX 5L):
    /opt/mqm/java/bin/JMSAdmin
  • в AIX 5L:
    /usr/mqm/java/bin/JMSAdmin
  • После запуска программа генерирует следующий вывод:
    5724-H72, 5655-L82, 5724-L26 (c) Copyright IBM Corp. 2002,2005. All Rights
    Reserved. Starting Websphere MQ classes for Java(tm) Message Service
    Administration
    InitCtx>
  • Создайте объект Topic Connection Factory (TCF) для подключения к брокеру публикации-подписки, работающему в менеджере очередей host1/jmspubsub. Для этого выполните следующую команду:
    DEFINE TCF(PubSub.TCF) QMANAGER(host1/jmspubsub) TRANSPORT(BIND)
  • Создайте объект Topic для темы MQJMS/Samples/PubSub, выполнив следующую команду:
    DEFINE T(PubSub.T) TOPIC(MQJMS/Samples/PubSub)
  • Остановите WebSphere MQ JMS Administration tool следующей командой:
    END
  • 9.5.7. Копирование примера JMS-приложения WebSphere MQ

    Приложение-пример, иллюстрирующее функции публикации и подписки на сообщения в WebSphere MQ JMS, находится в каталоге.

  • В Windows:
    C:\Program Files\IBM\WebSphere MQ\Tools\Java\jms\JMSPubSub.java
  • В UNIX (кроме AIX 5L):
    /opt/mqm/samp/java/jms/JMSPubSub.java
  • В AIX 5L:
    /usr/mqm/samp/java/jms/JMSPubSub.java
  • Скопируйте этот файл в рабочий каталог, созданный для этого примера.

    9.5.8. Модификация примера JMS-приложения WebSphere MQ

    Ниже показано, как изменить пример JMS-приложения, чтобы он смог работать с созданным ранее каталогом через JNDI, а также с объектами, созданными в этом каталоге при помощи WebSphere MQ JMS Administration tool.

    Также необходимо привести имена объектов в соответствие базовым правилам именования, принятым в данной системе, а не правилам LDAP (последние в данной книге не рассматриваются).

    Выполните следующие действия.

  • Откройте файл JMSPubSub.java в текстовом редакторе.
  • Найдите в коде следующие строки (в примере для WebSphere MQ V6.0 они начинаются со строки 88):
    String CTX_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory"; String INIT_URL =
    "ldap://polaris/cn=PubSub,o=ibm_us,c=us";
  • Отредактируйте следующие строки согласно параметрам конфигурации WebSphere MQ JMS Administration tool:
    String CTX_FACTORY = "com.sun.jndi.fscontext.RefFSContextFactory"; String
    INIT_URL = "file:jms.provider";
  • Найдите в коде следующую строку (в примере для WebSphere MQ V6.0 – строка 98):
    TopicConnectionFactory tcf = (TopicConnectionFactory)ctx.lookup( "cn=PubSub.
    TCF" );
  • Отредактируйте эту строку, подставив имя объекта Topic Connection Factory, созданного ранее при помощи WebSphere MQ JMS Administration tool:
    TopicConnectionFactory tcf = (TopicConnectionFactory)ctx.lookup( "PubSub.TCF" );
  • Найдите в коде следующую строку (в примере для WebSphere MQ V6.0 – строка 112):
    Topic t = (Topic)ctx.lookup( "cn=PubSub.T" );
  • Отредактируйте эту строку, подставив имя объекта Topic, созданного ранее при помощи WebSphere MQ JMS Administration tool:
    Topic t = (Topic)ctx.lookup( "PubSub.T" );
  • Сохраните файл.
  • 9.5.9. Компиляция приложения-примера

    Компиляция примера JMS-приложения для WebSphere MQ, демонстрирующего публикацию и подписку, выполняется следующей командой:

    javac JMSPubSub.java

    В результате ее исполнения в рабочем каталоге создается файл JMSPubSub.class.

    9.5.10. Запуск приложения-примера в режиме подписчика

    Скомпилированный пример JMS-приложения может работать как в режиме издателя сообщения, так и в режиме подписчика. Допускается запуск сразу нескольких экземпляров программ-издателей и подписчиков.

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

  • Откройте окно командной строки или терминальный сеанс, где будет запущен экземпляр программы, который станет подписчиком сообщений. Сделайте настройки, описанные в разделе 9.5.1.
  • Выполните следующую команду, чтобы запустить программу-пример в режиме подписчика:
  • в Windows:
    java JMSPubSub -sub
  • в UNIX (кроме AIX 5L):
    java -D"java.library.path=/opt/mqm/java/lib" JMSPubSub -sub
  • в AIX 5L:
    java -D"java.library.path=/usr/mqm/java/lib" JMSPubSub -sub
  • После запуска программа генерирует следующий вывод:
    [R]eceiveBlock, Receive[N]oWait, Receive[5]Secs, [Q]uit?
  • Чтобы заставить экземпляр-подписчик ожидать публикации следующего сообщения по данной теме, нажмите R, затем Enter.Примечание Эти клавиши необходимо нажимать после получения каждого сообщения.
  • 9.5.11. Запуск программы-примера в режиме издателя

    Скомпилированный пример JMS-приложения может работать как в режиме издателя сообщения, так и в режиме подписчика. Допускается запуск сразу нескольких экземпляров программ-издателей и подписчиков.

    Чтобы запустить программу-пример в режиме издателя, выполните следующие действия:

  • Откройте окно командной строки или терминальный сеанс, где будет запущен экземпляр программы, который станет издателем сообщений. Сделайте настройки, описанные в разделе 9.5.1.
  • Выполните следующую команду, чтобы запустить программу-пример в режиме издателя:
  • в Windows:
    java JMSPubSub -pub
  • в UNIX (кроме AIX 5L):
    java -D"java.library.path=/opt/mqm/java/lib" JMSPubSub -pub
  • в AIX 5L:
    java -D"java.library.path=/usr/mqm/java/lib" JMSPubSub -pub
  • После запуска программа генерирует следующий вывод:
    [P]ublish message, [Q]uit?
  • Чтобы опубликовать сообщение, нажмите P, затем Enter.
  • Введите текст публикуемого сообщения и нажмите Enter. Сообщение будет опубликовано и станет доступным всем ожидающим подписчикам. Получив такое сообщение, подписчик генерирует вывод следующего вида:
    JMS Message class: jms_text JMSType: null
    JMSDeliveryMode: 2
    JMSExpiration: 0 JMSPriority: 4
    JMSMessageID: ID:414d5120686f7374312f6a6d73707562d1dcdd4220001e08
    JMSTimestamp: 1121839520615
    JMSCorrelationID:ID:414d5120686f7374312f6a6d73707562d1dcdd4220006f05
    JMSDestination: topic://MQJMS/Samples/PubSub JMSReplyTo: null JMSRedelivered:
    false
    JMS_IBM_PutDate:20050720
    JMSXAppID:host1/jmspubsub
    JMS_IBM_Format:MQSTR
    JMS_IBM_PutApplType:26
    JMS_IBM_MsgType:8 JMSXUserID:pbroad
    JMS_IBM_PutTime:06052061
    JMSXDeliveryCount:1
    Redbook test message
  • Страницы:

    В этой лекции обсуждаются следующие темы:

  • Обзор глав с практическими заданиями
  • Настройка окружения
  • Обмен сообщениями с использованием локального менеджера очередей
  • Создание службы обработки запросов и ответов на основе очереди
  • Рассылка сообщений по подписке в WebSphere MQ с использованием JMS
  • 9.1. Обзор глав с практическими заданиями

    Этот курс содержит практическое введение в очереди сообщений WebSphere MQ, которое разбито на две лекции.

  • В этой лекции вы научитесь создавать и администрировать менеджеры очередей, обеспечивающие доступ к службам обработки сообщений. Эти службы доступны посредством менеджеров очередей и поддерживают различные модели обмена сообщениями: межточечный обмен либо рассылку сообщений по подписке.
  • В лекции 10 вы научитесь связывать менеджеры очередей с использованием TCP/IP-сетей как в центрально-лучевую (hub-and-spoke) инфраструктуру, так и в кластеры с целью предоставления доступа к этим службам.
  • При изучении материалов введения вы будете пользоваться административными интерфейсами и примерами приложений из состава WebSphere MQ.

    9.1.1. Администрирование менеджеров очередей

    Многие административные задачи решаются с использованием WebSphere MQ Explorer либо интерфейса сценариев MQSC. Ниже приводятся пошаговые инструкции для обоих случаев.

    Если у вас нет опыта работы с WebSphere MQ, рекомендуем воспользоваться WebSphere MQ Explorer. По мере накопления знаний можно приступать к освоению MQSC – так вы научитесь создавать сценарии для решения описанных в этой главе задач. Так, процедуры контроля изменений могут требовать сценариев MQSC для внесения любых изменений в производственной среде.

    Примечание Здесь и далее используются имена в нижнем регистре как оптимальные для администрирования с применением WebSphere MQ Explorer.

    Следите, чтобы в командах MQSC значения атрибутов и имена объектов, содержащие символы в нижнем регистре, были заключены в одинарные кавычки. Регулярное применение кавычек – общая рекомендация при работе с MQSC, позволяющая избежать путаницы.

    9.1.2. Программы-примеры в WebSphere MQ

    С WebSphere MQ поставляется множество программ-примеров, как в виде исходного кода, так и в прекомпилированном, готовом к применению виде. В этой книге приводятся примеры на языке программирования С, использующие интерфейс очередей сообщений (MQI) для демонстрации межточечного обмена сообщениями. Имеются также аналогичные примеры на других языках программирования.

    Примеры на языке Java, использующие JMS – стандартный интерфейс прикладного программирования (API), – иллюстрируют обмен сообщениями по механизму публикации-подписки. По большому счету то же верно для клиентов IBM Message Service (XMS).

    Обмен сообщениями по подписке также может быть реализован при помощи соответствующих команд WebSphere MQ, адресованных брокеру публикации-подписки WebSphere MQ. Это возможно с использованием любого из API для межточечного обмена сообщениями, поддерживаемого WebSphere MQ.

    Прежде чем приступать к созданию решений на основе WebSphere MQ, прикладным программистам рекомендуется изучить прилагаемые примеры исходного кода на С либо других языках программирования. Эти примеры послужат хорошей отправной точкой при разработке и тестировании таких решений.

    9.2. Настройка окружения

    В этой главе предполагается, что вы работаете на сервере под управлением ОС Windows или Linux с WebSphere MQ V6.0. Впрочем, все задачи (за исключением связанных с WebSphere MQ Explorer) могут быть выполнены удаленно на UNIX-сервере с WebSphere MQ V6.0.

    Примечание Если вы работаете с WebSphere MQ на Linux-сервере, следуйте отдельным инструкциям, приведенным ниже.

    9.2.1. Установка WebSphere MQ V6.0

    Подробнее об установке сервера WebSphere MQ см. в руководстве WebSphere MQ V6.0 Quick Beginnings для соответствующей платформы:

  • WebSphere MQ для Windows V6.0 Quick Beginnings, GC34-6476
  • WebSphere MQ для Linux V6.0 Quick Beginnings, GC34-6480
  • Установите все необходимые и дополнительные компоненты, сделайте необходимые настройки.

    9.2.2. Привилегии администратора WebSphere MQ

    Учетная запись, под которой вы входите в систему, должна иметь привилегии администратора WebSphere MQ.

  • В Windows: ваша учетная запись должна быть членом одной из следующих групп:
  • Administrators,
  • mqm.
  • В UNIX: ваша учетная запись должна быть членом группы
  • mqm.
  • 9.2.3. Доступ к примерам WebSphere MQ

    Каталог с примерами WebSphere MQ должен быть в пути поиска, заданном соответствующей переменной окружения в ОС. При установке WebSphere MQ в Windows это делается автоматически.

    Примеры WebSphere MQ устанавливаются в следующий каталог.

  • В Windows: C:\Program Files\IBM\WebSphere MQ\Tools\c\Samples\Bin
  • В UNIX (кроме IBM AIX 5L): /opt/mqm/samp/bin – добавьте этот путь к пути поиска текущего терминального сеанса, например так:
    PATH=$PATH:/opt/mqm/samp/bin
    export PATH
  • В IBM AIX 5L: /usr/mqm/samp/bin – добавьте этот путь к пути поиска текущего терминального сеанса, например так:
    PATH=$PATH:/usr/mqm/samp/bin
    export PATH
  • 9.2.4. Замечания о Java

    Действия, описанные в разделе 9.5, требуют установки пакета Java Development Kit (JDK), расположенного в каталоге prereqs на установочном носителе WebSphere MQ V6.0. Если установить JDK невозможно, упражнения, посвященные обмену сообщениями по подписке, следует пропустить.

    9.3. Обмен сообщениями с помощью локального менеджера очередей

    В этом разделе вы познакомитесь с графическим интерфейсом, а также с интерфейсом командной строки, применяемым для создания, запуска, завершения и удаления менеджеров очередей. Кроме того, вы научитесь добавлять и извлекать из очереди тестовые сообщения, а также просматривать содержимое очередей с использованием WebSphere MQ Explorer и программ-примеров WebSphere MQ.

    Ниже предполагается, что вы знакомы с интерфейсами и примерами из этого раздела.

    9.3.1. Создание менеджера очередей по умолчанию

    Ниже показано, как создать на компьютере менеджер очередей и назначить его менеджером очередей по умолчанию.

    Это делается при помощи мастера WebSphere MQ Explorer Create Queue Manager либо команды crtmqm WebSphere MQ.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queue Managers в навигаторе и выберите New\Queue Manager – откроется страница Enter Basic Values (Step 1) мастера Create Queue Manager.
  • Введите host1/qm1 в поле Queue manager name.
  • Установите параметр Make this the default queue manager.
  • Для остальных параметров примите значения по умолчанию и щелкните Next, не щелкая кнопку Finish, – откроется страница Enter log values (Step 2).
  • Оставьте на этой странице значения по умолчанию и щелкните Next, не щелкая Finish, – откроется страница Enter configuration options (Step 3).
  • Снимите флажок Start queue manager.Примечание Флажок Start queue manager позволяет автоматически выполнить действия, описанные в разделе 9.3.2.

    Параметр Auto start менеджера очередей поддерживается только в Windows и позволяет автоматически запустить менеджер очередей при перезагрузке компьютера.

  • Для остальных полей оставьте значения по умолчанию и щелкните Next, не щелкая Finish, – откроется страница Enter listener options (Step 4).Примечание Если на вашем компьютере уже есть менеджер очередей с компонентом-слушателем WebSphere MQ, привязанным к стандартному TCP/IP-порту, на этой странице может появиться сообщение "The port is already used by another WMQ Listener".
  • Снимите флажок Create listener configured for TCP/IP.Примечание Этот флажок позволяет автоматически выполнить действия, описанные в разделе 10.2.1.
  • Для остальных полей оставьте значения по умолчанию и щелкните Next, не щелкая Finish, – откроется страница Enter explorer options (Step 5).
  • Оставьте значения по умолчанию на этой странице и щелкните Finish.
  • Откроется окно Creating Queue Manager "host1/qm1" с сообщением о состоянии.Примечание Если щелкнуть Show details в этом окне, можно просматривать команды WebSphere MQ, исполняя которые WebSphere MQ Explorer создает менеджер очередей. При этом после завершения установки (выводом сообщения Finished в главном окне) окно состояния следует закрыть вручную.
  • Завершив это упражнение, убедитесь, что в окне навигатора в папке Queue Managers отображается менеджер очередей в виде значка, соответствующего остановленному локальному менеджеру очередей.
  • Применение управляющих команд WebSphere MQ

    Выполните следующую команду, чтобы создать менеджер очередей в конфигурации по умолчанию и сделать его менеджером очередей по умолчанию на данном компьютере:

    crtmqm -q host1/qm1
    Примечание В отсутствие параметра -q созданный менеджер не станет менеджером очередей по умолчанию на данном компьютере.

    Эта команда генерирует следующий вывод:

    WebSphere MQ queue manager created.
    Creating or replacing default objects for host1/qm1.
    Default objects statistics : 43 created. 0 replaced. 0 failed.
    Completing setup.
    Setup completed.

    Следующая команда позволяет проверить, создан ли менеджер очередей:

    dspmq

    Эта команда генерирует следующий вывод:

    QMNAME(host1/qm1) STATUS(Ended immediately)

    9.3.2. Запуск менеджера очередей по умолчанию

    Ниже показано, как запустить созданный ранее менеджер очередей. Это делается с помощью WebSphere MQ Explorer либо управляющих команд amqmdain/strmqm WebSphere MQ.

    В управляющих командах WebSphere MQ не обязательно указывать имя менеджера очередей, поскольку эти команды адресованы менеджеру очередей по умолчанию.

    Применение WebSphere MQ Explorer

    Щелкните правой кнопкой менеджер очередей host1/qm1 в окне навигатора и выберите Start – откроется окно, похожее на то, что отображалось во время создания менеджера очередей.

    Завершив это упражнение, убедитесь, что в окне навигатора в папке Queue Managers отображается менеджер очередей в виде значка, соответствующего работающему локальному менеджеру очередей.

    Применение управляющих команд WebSphere MQ

    Команды для UNIX и Windows отличаются следующим:

  • Windows:
    amqmdain qmgr start
    Примечание Эта команда позволяет запустить менеджер очередей так, чтобы при выходе из системы и входе в нее он не останавливался. В UNIX аналогичная команда работает, но при выходе из системы запущенный ей менеджер очередей завершается.

    В WebSphere MQ для Windows V5.3 используйте следующую команду:

    amqmdain start host1/qm1
  • UNIX:
    strmqm

    Эта команда генерирует следующий вывод:

    WebSphere MQ queue manager 'host1/qm1' starting.
    5 log records accessed on queue manager 'host1/qm1' during the log replay
    phase.
    Log replay for queue manager 'host1/qm1' complete.
    Transaction manager state recovered for queue manager 'host1/qm1'.
    WebSphere MQ queue manager 'host1/qm1' started.
  • Примечание Следующий вывод свидетельствует о том, что данный менеджер очередей не является менеджером очередей по умолчанию на этом компьютере:
    AMQ8118: WebSphere MQ queue manager does not exist.

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

  • Применение WebSphere MQ Explorer (в Windows):
  • щелкните правой кнопкой IBM WebSphere MQ в окне навигатора и выберите Properties ;
  • проверьте и при необходимости отредактируйте поле Default queue manager name. В нем должно быть следующее значение:
    host1/qm1
  • щелкните OK.
  • применение файла mqs.ini в UNIX:
  • откройте файл mqs.ini в текстовом редакторе, таком как vi или emacs. Файл mqs.ini находится в каталоге
    /var/mqm/mqs.ini
  • найдите строку
    DefaultQueueManager:
  • если эта строка не существует, добавьте ее в конце файла;
  • затем добавьте следующую строку:
    Name=host1/qm1
  • 9.3.3. Создание локальной очереди

    В этом разделе рассказывается, как определить новый объект локальной очереди в менеджере очередей. Объект локальной очереди представляет очередь, обслуживаемую менеджером очередей, в которую можно добавлять сообщения, а также получать сообщения из нее.

    Это делается с использованием WebSphere MQ Explorer либо команды MQSC DEFINE, поддерживаемой командой runmqsc. Команда runmqsc служит для отправки команд MQSC менеджеру очередей.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Раскройте значок менеджера очередей host1/qm1 в навигаторе – откроется папка Queues менеджера.
  • Щелкните правой кнопкой папку Queues и выберите New\Local Queue – откроется страница "Enter a name" (с значком в виде красного креста) мастера Create Local Queue.
  • Введите queue1 в поле Name.
  • Щелкните Next, не щелкая Finish, – откроется страница Change the properties of the new Local Queue, на которой можно задать исходные атрибуты объекта локальной очереди.
  • Введите в поле Description следующее:
    Redbook example queue1: Newly defined
  • Щелкните Finish – на некоторое время откроется индикатор хода выполнения, затем окно результатов с сообщением:
    The object was created successfully. (AMQ4148)
  • Применение команд MQSC

    Выполните следующие действия.

  • Запустите интерактивный сеанс MQSC для менеджера очередей по умолчанию следующей командой:
    runmqsc
  • После запуска интерактивный сеанс MQSC ожидает ввода, отображая мигающий курсор, и генерирует следующий вывод:
    5724-H72 (C) Copyright IBM Corp. 1994, 2004. ALL RIGHTS RESERVED.
    Starting MQSC for quew host1/qm1.
    Теперь сеанс готов к приему ввода, дополнительное сообщение о запуске сеанса не отображается.Примечание Если менеджер очередей не запустился или не назначен менеджером по умолчанию, генерируется следующий вывод и отображается обычное приглашение ОС:
    5724-H72 (C) Copyright IBM Corp. 1994, 2004. ALL RIGHTS RESERVED.
    AMQ8146: WebSphere MQ queue manager not available.
    No MQSC commands read.
    No commands have a syntax error.
    All valid MQSC commands were processed.
  • Выполните следующую команду, чтобы создать очередь:
    DEFINE QLOCAL('queue1') + DESCR('Redbook example queue1: Newly defined')
    Примечание Для использования символов в нижнем регистре в именах и описаниях важно использовать одинарные кавычки (см. пример выше).

    Заметьте, что символ "+" завершает первую строку и перед ним после скобки стоит пробел. Это позволяет создавать многострочные команды MQSC.

    Команда генерирует следующий вывод:
    AMQ8006: WebSphere MQ queue created.
    Примечание Если предпринять несколько попыток создания очереди, то попытки, следующие за успешным созданием, окончатся неудачей и выводом следующего сообщения:
    AMQ8150: WebSphere MQ object already exists.
    В этом случае добавьте к команде атрибут REPLACE, например так:
    DEFINE QLOCAL('queue1') REPLACE + DESCR('Redbook example queue1:
    Newly defined')
  • Выйдите из интерактивного сеанса MQSC, выполнив команду
    END
    Вы вернетесь в командную строку ОС, и будет сгенерирован вывод со сводкой команд, выполненных во время сеанса, например:
    END
    2 : END One MQSC command read. No commands have a syntax error. All valid MQSC
    commands were processed.
  • 9.3.4. Отображение атрибутов новой очереди

    Атрибут описания ( DESCR ) хранится в определении объекта. Все остальные атрибуты имеют значения по умолчанию. Например, для атрибута, определяющего постоянство сообщений по умолчанию ( DEFPSIST ), задано значение NO (непостоянные). Значение неизменяемого атрибута CURDEPTH, определяющего текущую длину очереди, показывает, что длина новой очереди равна нулю.

    Просмотр значения атрибутов возможен с помощью WebSphere MQ Explorer (средствами схемы WebSphere MQ Explorer) либо команды runmqsc, поддерживающей использование символов обощения и значений атрибутов в командах MQSC DISPLAY.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Выделите папку Queues в менеджере очередей host1/qm1, расположенном в папке Queue Managers навигатора.
  • В таблице отображается строка с описанием очереди queue1. В столбцах таблицы выводятся значения атрибутов очереди. Прокрутите таблицу вправо для просмотра значений атрибутов Description, Persistence и Current queue depth.
  • Можно изменять порядок столбцов по умолчанию, а также сохранять настроенный вид таблицы с помощью схем WebSphere MQ. Внизу таблицы отображается следующий текст:
    Scheme: Standard for Queues – Distributed
  • Это свидетельствует об использовании схемы столбцов по умолчанию, а также о том, что этот менеджер очередей не относитcя к числу менеджеров очередей WebSphere MQ для z/OS. Обычно термин distributed (распределенный) обозначает любые платформы, кроме мейнфреймов.

    Справа от текста находится стрелка. Щелкните ее – откроется меню со списком готовых схем, которые можно применить к таблице, а также команд для редактирования схем и управления ими.

    Щелкните Manage Schemes – откроется окно, в котором можно создать собственные или отредактировать существующие схемы для таблиц, отображающих сведения об очередях в WebSphere MQ Explorer.

    Например, можно переместить столбцы Description, Persistence и Current queue depth в начало таблицы.

    Применение команды MQSC

    Выполните следующие действия.

  • Запустите интерактивный сеанс MQSC для менеджера очередей по умолчанию следующей командой:
    runmqsc
  • Следующей командой MQSC выведите список объектов локальных очередей:
    DISPLAY QLOCAL(*)
    Вывод этой команды содержит сводку всех локальных очередей; в этом примере отображаются сведения об очереди queue1:
    AMQ8409: Display Queue details. QUEUE(queue1) TYPE(QLOCAL)
  • Исполните следующую команду MQSC для просмотра всех атрибутов этой очереди:
    DISPLAY QLOCAL('queue1') ALL
    Команда выводит значения множества атрибутов.Примечание Для использования символов в нижнем регистре в именах объектов важно использовать одинарные кавычки (см. пример выше). В противном случае вы получите сообщение об ошибке:
    AMQ8147: WebSphere MQ object QUEUE1 not found.
  • Чтобы просматривать только такие атрибуты, как постоянство по умолчанию, описание и текущая длина очереди, выполните следующую команду MQSC:
    DISPLAY QLOCAL('queue1') DEFPSIST DESCR CURDEPTH
    Эта команда генерирует следующий вывод:
    AMQ8409: Display Queue details. QUEUE(queue1) TYPE(QLOCAL) CURDEPTH(0)
    DEFPSIST(NO) DESCR(Redbook example queue1: Newly defined)
  • Выполните следующую команду, чтобы выйти из интерактивного сеанса MQSC:
    END
    Примечание Команда MQSC DISPLAY QUEUE позволяет выводить атрибуты любого объекта очереди независимо от его типа. Например, следующая команда отображает все объекты очередей, определенные в менеджере очередей:
    DISPLAY QUEUE(*)
  • 9.3.5. Модификация атрибутов объекта очереди

    Ниже рассказано, как изменить атрибуты существующего объекта очереди с помощью WebSphere MQ Explorer и команд MQSC.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Выделите папку Queues менеджера очередей host1/qm1, расположенную в папке Queue Managers навигатора.
  • Щелкните правой кнопкой строку queue1 в таблице и выберите команду Properties либо щелкните дважды эту строку – откроется окно свойств объекта локальной очереди.
  • Введите в поле Description следующий текст:
    Redbook example queue1: Altered description
  • Щелкните OK – на короткое время откроется окно с индикатором хода операции.
  • Обратите внимание на изменение атрибута-описания объекта локальной очереди в таблице очередей.
  • Применение команд MQSC

    Выполните следующие действия.

  • Запустите интерактивный сеанс MQSC для менеджера очередей по умолчанию командой
    runmqsc
  • Выполните следующую команду MQSC, чтобы изменить атрибут с описанием очереди:
    ALTER QLOCAL('queue1') + DESCR('Redbook example queue1: Altered description')
    Примечание Для использования символов в нижнем регистре в именах объектов важно использовать одинарные кавычки (см. пример выше). В противном случае вы получите сообщение об ошибке:
    AMQ8147: WebSphere MQ object QUEUE1 not found.
  • Чтобы вывести обновленный атрибут очереди, выполните следующую команду:
    DISPLAY QLOCAL('queue1') DESCR
  • Выполните следующую команду, чтобы выйти из интерактивного сеанса MQSC:
    END
  • 9.3.6. Добавление тестовых сообщений в очередь

    Ниже рассказывается, как поместить в ранее созданную очередь сообщения с произвольным текстом при помощи WebSphere MQ Explorer и программы-примера amqsput для WebSphere MQ, работающей с менеджером очередей по умолчанию на данном компьютере.

    Видно, что после добавления сообщений в очередь значение ее атрибута "текущая длина" ( CURDEPTH ) изменяется и отражает число добавленных сообщений. О просмотре этого атрибута см. в разделе 9.3.4.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Выделите папку Queues менеджера очередей host1/qm1, расположенную в папке Queue Managers в окне навигатора.
  • Щелкните правой кнопкой строку queue1 в таблице и выберите команду Put Test Message – откроется одноименное окно.
  • Введите в поле Message data текст сообщения.
  • Щелкните Put message – поле Message data опустеет. Так можно ввести несколько тестовых сообщений; после ввода каждого сообщения щелкайте Put message.
  • Щелкните Close, чтобы закрыть окно.
  • Применение программы-примера для WebSphere MQ

    Примечание Путь к каталогу с примерами программ для WebSphere MQ должен быть добавлен к пути поиска в переменных окружения ОС.

    Выполните следующие действия.

  • Выполните следующую команду:
    amqsput queue1
    Генерируется следующий вывод, после чего команда ожидает ввода пользователя:
    Sample AMQSPUT0 start
    target queue is queue1
  • Введите сообщение и нажмите клавишу Enter. Так можно ввести несколько тестовых сообщений; после ввода каждого сообщения нажимайте Enter.
  • Чтобы выйти, нажмите Enter, не вводя текста.
  • Примечание Если вы получаете сообщение об ошибке 2059 или 2058 (см. листинг ниже), проверьте, настроен ли менеджер очередей как менеджер по умолчанию (см. раздел 9.3.2) и работает ли он (командой dspmq ):
    Sample AMQSPUT0 start
    MQCONN ended with reason code 2059
    Получив сообщение, подобное следующему, проверьте имена указанной в команде очереди (включая регистр символов) и созданного объекта, о просмотре имен см. в разделе 9.3.4.
    Sample AMQSPUT0 start
    target queue is QUEUE1
    MQOPEN ended with reason code 2085
    unable to open queue for output
    Sample AMQSPUT0 end
    Для толкования кодов возврата служит команда mqrc, принимающая код как параметр. Ниже показаны примеры вывода mqrc для кодов 2058, 2059 и 2085:
    2058 0x0000080a MQRC_Q_MGR_NAME_ERROR
    2059 0x0000080b MQRC_Q_MGR_NOT_AVAILABLE
    2085 0x00000825 MQRC_UNKNOWN_OBJECT_NAME
    Другие коды возврата MQCONN, MQOPEN и MQPUT также можно расшифровать с помощью mqrc. Подробнее о кодах возврата см. в разделе "API completion and reason codes" руководства WebSphere MQ Messages, GC34-6601.

    9.3.7. Просмотр сообщений, добавленных в очередь

    Здесь рассказывается, как осуществляется просмотр сообщений, находящихся в данный момент в очереди WebSphere MQ, без их удаления. Для просмотра доступно как содержимое сообщений, так и сведения о них, хранимые в дескрипторах сообщений.

    Сообщения, добавляемые в очередь, являются непостоянными ( nonpersistent messages ). В поле reply-to queue manager сообщений автоматически записывается строка host1/qm1 менеджером, в чью очередь добавлены эти сообщения.

    Сообщения, генерация которых описана в разделе 9.3.6, представляли собой дейтаграммы, то есть сообщения, не требующие ответа.

    В силу этой причины значение reply-to queue не определялось WebSphere MQ Explorer или программой-примером amqsput при добавлении сообщения.

    Сейчас мы воспользуемся интерфейсом WebSphere MQ Explorer либо программой-примером amqsbcg для WebSphere MQ.

    Примечание Эти методы весьма удобны при разработке, тестировании и мониторинге очередей рабочих систем, поскольку такой метод просмотра никак не влияет на содержащиеся в очереди сообщения.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой очередь в таблице менеджера очередей и выберите Browse Messages – откроется окно с индикатором хода операции, а затем окно Message browser.
  • Каждая строка в таблице, отображаемой в окне Message browser, представляет одно из сообщений в очереди. В столбцах этой таблицы отображается информация о сообщении, которая находится в дескрипторе сообщения, а также содержимое или данные сообщения. Настраивая схему таблицы, можно изменять порядок столбцов, чтобы, например, переместить столбцы Persistence, Message type, Message data, Reply-to queue и Reply-to Queue Manager в начало таблицы.
  • Некоторые типы сообщений лучше просматривать в виде двоичных данных, а не текста. Для этого дважды щелкните строку таблицы, представляющую сообщение, – откроется окно свойств сообщения. Щелкните секцию Data в этом окне.
  • Применение программы-примера для WebSphere MQ

    Выполните следующие действия:

  • Выполните следующую команду для просмотра сообщений в очереди менеджера по умолчанию; вывод команды будет перенаправлен в файл queue1.txt:
    amqsbcg queue1 > queue1.txt
  • Откройте queue1.txt в любом текстовом редакторе. Для каждого из сообщений в файле содержатся сведения из дескриптора и содержимое в двоичном и текстовом (справа) представлении.
  • Читать сведения из такого файла сложнее, чем в WebSphere MQ Explorer. Разберем значение наиболее интересных полей вывода команды amqsbcg.

    MsgType : 8

    Тип 8 соответствует дейтаграммам. Запросы имеют тип 1, ответы – 2, отчеты – 4.

    Persistence : 0

    Значение "0" свидетельствует о том, что сообщение является непостоянным, а значение "1", напротив, говорит о том, что это сообщение является постоянным.

    ReplyToQ : ' '

    В этом поле отображается 48-значное имя очереди ответов (reply-to queue). Если в имени меньше 48 символов, недостающие символы заменяются пробелами, расположенными справа. Такие данные называются дополненными пробелами (blankpadded), они часто используются в структурах WebSphere MQ. В этом примере данное поле в дескрипторе сообщений пусто.

    ReplyToQMgr : 'host1/qm1 '

    Это поле содержит 48-значное дополненное пробелами имя менеджера очереди ответов (reply-to queue manager), оно автоматически заполняется менеджером очередей при размещении сообщения.

    **** Message ****
    length – 20 bytes
    00000000: 5265 6462 6F6F 6B20 7465 7374 206D 6573   'Redbook test mes'
    00000010: 7361 6765                     'sage '

    Здесь отображается содержимое сообщения в двоичном и (справа) в текстовом представлении. Это существенно облегчает просмотр содержимого некоторых типов сообщений, особенно объемных, которые проще просматривать в двоичном представлении. Впрочем, содержимое простых тестовых сообщений из наших примеров как раз удобнее просматривать в текстовом представлении.

    9.3.8. Определение и использование псевдонимов локальных очередей

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

    Атрибуты объекта псевдонима очереди определяют параметры по умолчанию, с которыми сообщения добавляются в очередь, на которую ссылается псевдоним (его целевую очередь). Так, ниже показано, что если настроить для псевдонима свойство persistent, то сообщения, добавленные через этот псевдоним, будут постоянными.

    Примечание В данном примере для наглядности в одну и ту же очередь добавляются сообщения двух типов: постоянные и непостоянные. Однако в WebSphere MQ более эффективны очереди с сообщениями одного типа, поэтому смешивать постоянные и непостоянные сообщения в одной очереди не рекомендуется.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queues в host1/qm1 и выберите New\Alias Queue – откроется страница " Enter a name " мастера New Alias Queue, помеченная красным крестиком.
  • Введите queue1.persistent в поле Name.
  • Щелкните Next, не щелкая Finish, – откроется окно настройки свойств нового псевдонима. В нем можно задать атрибуты объекта псевдонима очереди.
  • Введите queue1 в поле Base queue.Примечание В результате этого действия будет задан атрибут "целевая очередь" ( target queue, TARGQ ) объекта псевдонима очереди.
  • Введите в поле Description следующее значение:
    Redbook example alias to queue1: For persistent messages
  • Установите значение Persistent для поля Persistence.
  • Щелкните Finish, затем в окне сообщения AMQ4148 об успешном создании объекта щелкните OK.
  • Щелкните правой кнопкой новую строку в таблице Queues (queue1.persistent), выберите Put Test Message и добавьте в очередь несколько сообщений.
  • Обратите внимание, что значение атрибута "текущая длина" очереди queue1 увеличилось. Просмотрите сообщения в очереди queue1, как описано в разделе 9.3.7. Сообщения, добавленные в очередь через этот псевдоним, имеют атрибут Persistent (постоянные), тогда как ранее добавленные сообщения имеют атрибут Not Persistent (непостоянные).
  • Применение команд MQSC

    Выполните следующие действия.

  • Выполните следующую команду MQSC (с использованием runmqsc ):
    DEFINE QALIAS('queue1.persistent') TARGQ('queue1') DEFPSIST(YES) +
    DESCR('Redbook example alias to queue1: For persistent messages')
  • Проверьте атрибуты объекта псевдонима очереди при помощи следующей команды MQSC:
    DISPLAY QALIAS('queue1.persistent') TARGQ DEFPSIST DESCR
    Примечание Помните, что имя queue1 должно быть в нижнем регистре, поэтому при определении объекта псевдонима очереди важно заключать аргумент TARGQ в одинарные кавычки.
  • Выйдите из runmqsc командой END, затем добавьте к очереди несколько тестовых сообщений через псевдоним с помощью программы-примера для WebSphere MQ (передача пустой строки вызывает завершение программы):
    amqsput queue1.persistent
  • Просмотрите сообщения в очереди, как описано в разделе 9.3.7. Обратите внимание, что новые сообщения являются постоянными, а прежние (добавленные напрямую, без псевдонима) – нет.
  • 9.3.9. Завершение и перезапуск менеджера очередей

    Ниже рассказывается, как остановить менеджер очередей с помощью WebSphere MQ Explorer или команды endmqm. Далее вы перезапустите менеджер очередей и просмотрите сообщения в очереди. Сообщения, являющиеся непостоянными, исчезнут, а постоянные – останутся в очереди.

    При этом будет выполнена т. н. "плавная" остановка менеджера очередей, во время которой он уведомляет об остановке все подключенные к нему приложения, но не прекращает принимать от них запросы.

    Примечание Также возможна немедленная остановка менеджера очередей, при которой он завершает только текущие операции, но не выполняет больше никаких действий. Этот метод используется, если работа менеджера очередей не завершается слишком долго. Немедленное завершение работы менеджера очередей возможно и во время его "плавной" остановки.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой значок менеджера очередей в папке Queue Managers и выберите команду Stop – откроется окно End Queue Manager.
  • В этом окне оставьте переключатель в положении Controlled.Примечание Управляемое завершение (controlled end) менеджера очередей в WebSphere MQ Explorer аналогично завершению командой endmqm и выполняет "плавную" остановку с выводом окна состояния до окончания остановки менеджера очередей.
  • Дождитесь завершения остановки (см. окно состояния). Заметьте, что теперь для менеджера очередей отображается значок остановленного локального менеджера очередей.
  • Перезапустите менеджер очередей, щелкнув его правой кнопкой и выбрав команду Start. Дождитесь завершения запуска (см. окно состояния).
  • Изучите содержимое очереди queue1. Обратите внимание, что в ней остались лишь постоянные сообщения, добавленные ранее при помощи псевдонима очереди.
  • Применение управляющих команд WebSphere MQ

    Выполните следующие действия.

  • Следующая команда завершает менеджер очередей, вызывая его "плавную" остановку:
    endmqm -w host1/qm1
    Примечание Команда endmqm требует указывать имя менеджера очередей, даже если она адресована менеджеру очередей по умолчанию. Это позволяет избежать случайной остановки менеджера очередей по умолчанию.

    Другой синтаксис команды endmqm имеет следующий вид:

    endmqm имя_менеджера_очередей

    При вызове без дополнительных параметров эта команда инициирует "плавную" остановку и сразу возвращает управление. Команда dspmq позволяет увидеть, когда остановится менеджер очередей.

    Следующая команда немедленно останавливает менеджер очередей:

    endmqm -i имя_менеджера_очередей
  • Для перезапуска менеджера очередей используется команда amqmdain qmgr start (в Windows) либо strmqm (в UNIX), см. раздел 9.3.2.
  • Просмотрите сообщения в очереди queue1, как описано в разделе 9.3.7. Заметьте, что в очереди остались только постоянные сообщения.
  • Примечание Можно настроить отдельную локальную очередь так, чтобы при перезапуске менеджера очередей не потерять непостоянные сообщения. Для этого необходимо воспользоваться значением High атрибута класс NPM (NPMCLASS), который задают в секции Storage окна свойств очереди. Можно выполнить эти действия сейчас над очередью queue1.

    Однако такие настройки не эквивалентны использованию постоянных сообщений. WebSphere MQ не регистрирует в журнале операции над непостоянными сообщениями и не восстанавливает их после сбоев менеджера очередей. Следовательно, сообщения в очередях класса High все равно могут быть потеряны. Поэтому данные, критичные для бизнеса, непременно должны быть помечены как постоянные.

    9.3.10. Извлечение сообщений из очереди

    Ниже рассказывается, как извлечь сообщения из очереди WebSphere MQ, при этом извлекаемые сообщения удаляются из очереди. Любое сообщение может быть успешно извлечено из очереди только одним приложением. Разберем это с использованием программ-примеров для WebSphere MQ.

    Выполните следующие действия:

  • Если в очереди queue1 не осталось сообщений, добавьте в нее несколько тестовых сообщений (напрямую либо через псевдоним).
  • Следующая команда извлекает все сообщения из очереди менеджера очередей по умолчанию:
    amqsget queue1

    Для каждого из сообщений в очереди эта команда выводит на экран строку, перед завершением программа ожидает добавления новых сообщений в течение 10 секунд. Если за это время в очередь будут добавлены новые сообщения, программа немедленно выводит их на экран и ожидает следующие 10 секунд.

    Вывод программы-примера выглядит так:

    Sample AMQSGET0 start
    message <Redbook test message 1>
    message <Redbook test message 2>
    message <Redbook test message 3>
    no more messages
    Sample AMQSGET0 end
  • Обратите внимание, что после завершения этой программы в очереди не останется сообщений. В этом можно убедиться путем просмотра содержимого очереди.
  • 9.3.11. Удаление объекта очереди

    Ниже рассказывается, как удалить объект очереди на примере ранее созданного объекта псевдонима. Это делается при помощи WebSphere MQ Explorer либо команды MQSC DELETE.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой объект псевдонима очереди, queue1.persistent, в таблице менеджера очередей и выберите Delete – система запросит подтверждение.
  • Пометьте флажком имя удаляемого объекта и щелкните Yes.
  • После того как окно состояния закроется, система вновь запросит подтверждение. Щелкните OK.
  • Обратите внимание на отсутствие удаленного объекта в таблице менеджера очередей.
  • Применение команд MQSC.

    Выполните следующие действия.

  • Выполните следующую команду MQSC (из-под runmqsc ):
    DELETE QALIAS('queue1.persistent')
    Генерируется следующий вывод:
    AMQ8007: WebSphere MQ queue deleted.
  • Заметьте, что объект удаленной очереди больше не отображается следующими командами MQSC:
    DISPLAY QUEUE(*)
    DISPLAY QALIAS(*)
  • 9.3.12. Создание псевдонима для менеджера очередей с использованием объекта удаленной очереди

    Псевдоним менеджера очередей лишь один из примеров объектов удаленных очередей, создаваемых при помощи WebSphere MQ Explorer или команды MQSC DEFINE QREMOTE.

    Примечание Псевдоним менеджера очередей – это объект удаленной очереди, у которого атрибут "имя удаленной очереди" пуст (не имеет значения). Подробнее его использование освещается в разделе 10.3.12.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queues менеджера host1/qm1 и выберите New\Remote Queue – откроется страница "Enter a name" мастера New Remote Queue, помеченная красным крестиком.
  • Введите host1/qm1.alias в поле Name.
  • Щелкните Next, не щелкая Finish, – откроется страница Change the properties of the new Alias Queue, на которой можно задать атрибуты псевдонима очереди.
  • Введите host1/qm1 в поле Remote Queue Manager.
  • В поле Description введите следующее значение:
    Redbook example queue manager alias to host1/qm1
  • Щелкните Finish, затем щелкните OK в окне сообщения AMQ4148 (об успешном создании объекта).
  • Применение команд MQSC

    Выполните следующие действия.

  • Выполните следующую команду MQSC (из-под runmqsc ):
    DEFINE QREMOTE('host1/qm1.alias') RNAME('') RQMNAME('host1/qm1') +
    DESCR('Redbook example queue manager alias to host1/qm1')
  • Проверьте атрибуты объекта удаленной очереди, представляющего псевдоним менеджера очередей, с помощью команды MQSC следующего вида:
    DISPLAY QREMOTE('host1/qm1.alias') RNAME RQMNAME DESCR
    Примечание Помните: имя host1/qm1 должно вводиться в нижнем регистре, поэтому важно заключить аргумент RQMNAME в одинарные кавычки при объявлении объекта псевдонима очереди.
  • 9.3.13. Указание менеджера очередей при обращении к очереди

    Ниже рассказывается, как указать нужный менеджер очередей, чтобы открыть очередь и поместить в нее сообщения. Для этого применяются программы-примеры WebSphere MQ. Следующий пример иллюстрирует гибкость различных типов объектов очередей при управлении разрешением имен очередей.

    Программы-примеры для WebSphere MQ поддерживают широкий спектр функций и параметров, в этом примере мы рассмотрим дополнительные функции программы-примера amqsput.

    Примечание Использованная в этом примере команда удобна для проверки маршрутов к удаленным менеджерам очередей. Для этого через локальный менеджер очередей отправляют тестовые сообщения на имя удаленного менеджера очередей.

    Применение программ-примеров WebSphere MQ

    Выполните следующие действия.

  • Запустите программу-пример для WebSphere MQ следующим образом и добавьте в очередь несколько сообщений:
    amqsput queue1 host1/qm1 8208 0 host1/qm1.alias
    Программу-пример здесь вызывают со следующими параметрами:
  • queue1 – имя очереди;
  • host1/qm1 – имя менеджера очередей, к которому подключаются для отправки сообщений;
  • 8208 – десятичный код параметров запроса, который должен быть передан при вызове MQOPEN (для данного примера это не важно). Такой вызов заставляет открыть очередь сообщений для записи с целью добавления в нее сообщений и приводит к неудаче последующие попытки добавить сообщения, если менеджер очередей находится в процессе "плавной остановки");
  • 0 – код, определяющий вызов MQCLOSE без параметров (не важно для данного примера);
  • host1/qm1.alias – имя объекта менеджера очередей, заданное при вызове MQOPEN (дополнительный параметр, используемый в этом примере). Оно соответствует ранее объявленному псевдониму менеджера очередей, а не менеджеру очередей, к которому приложение подключено напрямую. Механизм разрешения имен очередей преобразует эту ссылку в имя локального менеджера очередей ( host1/qm1 ) через псевдоним менеджера очередей.
  • Примечание Если уничтожить объект удаленной очереди, представляющий псевдоним менеджера очередей, неверно задать имя менеджера очередей (оно чувствительно к регистру) либо значение атрибута удаленной очереди или допустить ошибку при вызове команды amqsput, вызов MQOPEN завершится с кодом 2087 MQRC_UNKNOWN_REMOTE_Q_MGR.
  • Просмотрите содержимое queue1. Вы увидите, что сообщения доставлены в очередь queue1, обслуживаемую менеджером host1/qm1, включая сообщения, переданные через псевдоним host1/qm1.alias.
  • 9.3.14. Удаление менеджера очередей

    Ниже демонстрируется удаление менеджера очередей. Менеджер очередей удаляется вместе со всеми его очередями и сообщениями, восстановление их средствами WebSphere MQ невозможно. Эта операция осуществляется при помощи WebSphere MQ Explorer либо управляющей команды dltmqm.

    Примечание Команда dltmqm WebSphere MQ не запрашивает подтверждение перед удалением менеджеров очередей, отменить ее также невозможно. Поэтому пользуйтесь данной командой с осторожностью.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Если менеджер очередей host1/qm1 работает, щелкните его правой кнопкой и выберите Stop, чтобы остановить этот менеджер очередей.
  • Выберите метод остановки и щелкните OK – откроется окно состояния. Когда оно закроется, щелкните правой кнопкой менеджер очередей host1/qm1 в дереве навигатора и выберите Delete.
  • Проверьте имя удаляемого менеджера очередей в окне запроса подтверждения. Если все в порядке, щелкните Yes, чтобы удалить менеджер, в противном случае щелкните No для возврата в WebSphere MQ Explorer. При выборе удаления откроется окно состояния.
  • По завершении операции окно состояния закроется – менеджер очередей будет удален, он также исчезнет из дерева объектов навигатора.
  • Применение управляющих команд WebSphere MQ

    Выполните следующие действия.

  • Остановите менеджер очередей (см. раздел 9.3.9), например такой командой:
    endmqm -w host1/qm1
  • После остановки менеджер очередей можно удалить следующей командой:
    dltmqm host1/qm1
  • Примечание Подобно команде endmqm, команда dltmqm требует указывать имя менеджера очередей, даже при удалении менеджера очередей по умолчанию.

    9.4. Создание служб обработки запросов и ответов на основе очереди

    Ниже рассказывается о размещении служб на базе менеджера очередей, обеспечивающем интерфейс запрос-ответ для очереди. Среди прочего освещаются настройка триггеров для автоматического запуска службы при добавлении сообщения в очередь с использованием программ-примеров из WebSphere MQ.

    9.4.1. Создание и запуск менеджера очередей – основы службы

    Ниже показано, как создать менеджер очередей host1/echo.hub, который выступит в роли основы для службы, которая возвращает в составе ответа текст, пришедший в составе запроса.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queue Managers и выберите New\Queue Manager.
  • Введите host1/echo.hub в поле Queue manager name.
  • Снимите флажок Make this queue manager the default queue manager.
  • Щелкните Next.
  • Щелкните Next, чтобы принять параметры ведения журнала, заданные по умолчанию.
  • Пометьте флажок Start queue manager – это необходимо для автоматического запуска менеджера очередей.
  • Щелкните Next.
  • Снимите флажок Create listener configured for TCP/IP.
  • Щелкните Finish.
  • Применение управляющих команд WebSphere MQ

    Выполните следующие действия.

  • Создайте менеджер очередей, не делая его менеджером очередей по умолчанию, при помощи следующей команды:
    crtmqm host1/echo.hub
  • Запустите менеджер очередей следующей командой:
  • в Windows:
    amqmdain qmgr start host1/echo.hub
  • в UNIX:
    strmqm host1/echo.hub
  • 9.4.2. Создание очереди-основы службы

    Ниже рассказывается о создании объекта локальной очереди, который в дальнейшем станет основой службы, запускающейся для обработки поступающих запросов. Это делается с использованием WebSphere MQ Explorer либо команд MQSC. Атрибуты этой очереди имеют значения по умолчанию и запросы, поступающие в эту очередь, являются непостоянными.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queues менеджера очередей host1/echo.hub и выберите команду New\Local Queue.
  • Введите echo в поле Name.
  • Щелкните Next.
  • В поле Description введите следующее значение:
    Queue hosting the echo service
  • Щелкните Finish.
  • Применение команд MQSC

    Выполните следующую команду MQSC, адресованную менеджеру host1/echo.hub:

    DEFINE QLOCAL('echo') +
     DESCR('Queue hosting the echo service')

    9.4.3. Ручное объявление очереди ответов

    Ниже рассказывается, как вручную создать объект локальной очереди, которую запрашивающее приложение будет использовать для получения ответов. Это делается с использованием WebSphere MQ Explorer либо команд MQSC. Атрибуты очереди ответов имеют значения по умолчанию.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queues менеджера host1/echo.hub и выберите New\Local Queue.
  • Введите echo.replies.manual в поле Name.
  • Щелкните Next.
  • Введите в поле Description следующее значение:
    Manually defined reply-to queue for echo service
  • Щелкните Finish.
  • Применение команд MQSC

    Примечание Поскольку host1/echo.hub не является менеджером очередей по умолчанию, для запуска интерактивного сеанса MQSC применяется следующая команда:
    runmqsc host1/echo.hub
    Помните: для завершения интерактивного сеанса MQSC используется команда END.

    Выполните следующую команду MQSC для менеджера host1/echo.hub:

    DEFINE QLOCAL('echo.replies.manual') + DESCR('Manually defined reply-to queue
    for echo service')

    9.4.4. Добавление и анализ тестового запроса

    Ниже рассказывается, как добавить тестовое сообщение с запросом. Также вы узнаете, как изучить это сообщение, чтобы понять его отличие от сообщения-дейтаграммы. Для этого вы воспользуетесь программами-примерами WebSphere MQ. О просмотре очередей см. в разделе 9.3.7.

    Выполните следующие действия:

  • Выполните команду amqsreq, вызывающую одноименную программу–пример WebSphere MQ:
    amqsreq echo host1/echo.hub echo.replies.manual
    Примечание Эту команду вызывают со следующими параметрами:
  • echo – имя очереди-основы службы, предоставляющей интерфейс запрос-ответ; в настоящее время активных служб, обрабатывающих сообщения в этой очереди, нет;
  • host1/echo.hub – имя менеджера очередей, к которому подключается запрашивающее приложение;
  • echo.replies.manual – имя очереди ответов, которое запрашивающее приложение указывает в дескрипторах сообщений с запросами; запрашивающее приложение ожидает поступления ответов в эту очередь.
  • Первоначально эта команда генерирует следующий вывод:
    Sample AMQSREQ0 start
    server queue is echo
    replies to echo.replies.manual
    Примечание Следите за регистром имен очередей в MQSC и WebSphere MQ Explorer, а также параметров этой команды. При возврате неожиданного кода завершения воспользуйтесь командой mqrc, чтобы получить его понятное описание в текстовой форме.
  • Добавьте несколько сообщений через эту команду. После ввода каждого из сообщений нажимайте Enter. Чтобы прекратить отправку сообщений, нажмите Enter, не вводя ничего, – после этого программа в течение 10 секунд будет ожидать поступления ответов. На этот раз ответы не приходят, поскольку служба еще не настроена.
  • Изучите сообщения, добавленные в эхо-очередь (очередь с ответами), обращая внимание на:
  • тип сообщения ( MsgType ): это запрос (код 1);
  • имя эхо-очереди ( echo.replies.manual );
  • менеджер очередей, обслуживающий эхо-очередь ( host1/echo.hub );
  • при использовании WebSphere MQ Explorer выберите секцию Identifiers в окне свойств сообщения. Обратите внимание на то, что идентификатор сообщения ( MsgId ) представлен уникальным значением, сгенерированным WebSphere MQ;
  • также заметьте, что поле корреляционного идентификатора ( CorrelId ) пусто.
  • 9.4.5. Очистка очереди-основы службы

    Ниже рассказывается, как очистить очередь – основу службы. Это необходимо, чтобы сообщения, ранее добавленные в очередь, не помешали генерации (с использованием правил срабатывания, triggering rules) триггерных сообщений WebSphere MQ в ответ на поступление последующих сообщений. Если при выполнении последующих упражнений у вас возникнут проблемы, возможно, описанные ниже действия помогут устранить их.

    Примечание Эти действия не обязательны; помните также, что в реальной среде очистка очереди запросов может привести к потере важных данных.

    Это упражнение можно выполнить с использованием WebSphere MQ Explorer или команд MQSC.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Выберите папку Queues менеджера host1/echo.hub.
  • Щелкните правой кнопкой в таблице строку очереди echo и выберите Clear Messages.
  • В окне Clear queue оставьте флажок Queue will be cleared with the CLEAR command и щелкните Clear.
  • Заметьте, что теперь значение атрибута "текущая длина очереди" равно нулю.
  • Применение команд MQSC

    Выполните следующую команду MQSC в отношении менеджера host1/echo.hub:

    CLEAR QLOCAL('echo')

    9.4.6. Создание определения процесса для службы

    Ниже демонстрируется организация службы обработки запросов и ответов, работающей на базе очереди echo, с применением программы-примера amqsech. Эта программа предназначена для запуска с помощью триггеров WebSphere MQ.

    Далее рассказывается, как создать определение процесса, необходимого для запуска amqsech – приложения-примера WebSphere MQ, представляющего требуемую службу. Это делается с использованием WebSphere MQ Explorer или команд MQSC.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Process Definitions в менеджере host1/echo.hub и выберите New\Process Definition.Примечание Эта папка находится в папке Advanced менеджера очередей (см. окно навигатора).
  • Введите amqsech в поле Name.
  • Щелкните Next.
  • Введите следующий текст в поле Description:
    The amqsech WebSphere MQ sample program
  • Выберите подходящее значение параметра Application type:
  • в Windows: Windows NT ;
  • в UNIX: Unix.
  • Введите путь к приложению:
  • в Windows:
    C:\Program Files\IBM\WebSphere MQ\Tools\c\samples\bin\amqsech.exe
  • В UNIX (кроме AIX 5L):
    C:\Program Files\IBM\WebSphere MQ\Tools\c\samples\bin\amqsech.exe
    /opt/mqm/samp/bin/amqsech
  • В AIX 5L:
    /usr/mqm/samp/bin/amqsech
  • Щелкните Finish.
  • Применение команд MQSC

    Выполните следующие действия.

  • Выполните следующую команду MQSC для менеджера host1/echo.hub:
  • в Windows:
    DEFINE PROCESS('amqsech') + DESCR('The amqsech WebSphere MQ sample program') +
    APPLTYPE(WINDOWSNT) +
    APPLICID('C:\Program Files\IBM\WebSphere MQ\Tools\c\samples\bin\amqsech.exe')
  • в UNIX (кроме AIX 5L):
    DEFINE PROCESS('amqsech') + DESCR('The amqsech WebSphere MQ sample program') +
    APPLTYPE(UNIX) APPLICID('/opt/mqm/samp/bin/amqsech')
  • в AIX 5L:
    DEFINE PROCESS('amqsech') + DESCR('The amqsech WebSphere MQ sample program') +
    APPLTYPE(UNIX) APPLICID('/usr/mqm/samp/bin/amqsech')
  • Выполните следующую команду MQSC для просмотра атрибутов объекта определения процесса:
    DISPLAY PROCESS('amqsech')
  • Примечание Следите за регистром атрибутов и имени процесса в объекте определения. На платформах UNIX путь также чувствителен к регистру.

    9.4.7. Создание очереди инициации

    Ниже рассказывается, как создать локальную очередь с атрибутами по умолчанию, которая впоследствии станет очередью инициации, принимающей триггерные сообщения для очереди echo. Это делается при помощи WebSphere MQ Explorer либо команд MQSC.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Щелкните правой кнопкой папку Queues в менеджере host1/echo.hub и выберите New\Local Queue.
  • Введите echo.initq в поле Name.
  • Щелкните Next.
  • Введите в поле Description следующий текст:
    Initiation queue for triggering the echo service
  • Щелкните Finish.
  • Применение команд MQSC

    Выполните следующую команду MQSC в отношении менеджера host1/echo.hub:

    DEFINE QLOCAL('echo.initq') + DESCR('Initiation queue for triggering the echo
    service')

    9.4.8. Активация триггера для очереди-основы службы

    Ниже описывается активация триггера для очереди echo. В данном примере используется триггер типа first, генерирующий триггерное сообщение при поступлении в очередь первого сообщения.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Выберите папку Queues менеджера host1/echo.hub.
  • Щелкните правой кнопкой в таблице строку очереди echo и выберите Properties.
  • Перейдите в секцию Triggering.
  • В поле Trigger control установите значение On.
  • Назначьте параметру Trigger type значение First.
  • Введите echo.initq в поле Initiation queue.
  • Введите amqsech в поле Process name.
  • Щелкните OK.
  • Применение команд MQSC

    Выполните следующие действия.

  • Выполните следующую команду MQSC в отношении менеджера host1/echo.hub:
    ALTER QLOCAL('echo') + TRIGGER TRIGTYPE(FIRST) INITQ('echo.initq') +
    PROCESS('amqsech')
  • Проверьте атрибуты объекта очереди следующей командой MQSC:
    DISPLAY QLOCAL('echo') TRIGGER TRIGTYPE INITQ PROCESS
    Примечание Убедитесь, что выбран верный регистр для атрибутов.
  • 9.4.9. Запуск триггерного монитора WebSphere MQ

    Ниже рассказывается, как запустить триггерный монитор WebSphere MQ, отслеживающий поступление триггерных сообщений в ранее созданную очередь инициации echo.initq.

    Выполните следующие действия.

  • Откройте окно командной строки либо запустите новый терминальный сеанс (запустив триггерный монитор, не останавливайте его – он еще потребуется при изучении этой главы; если монитор по каким-то причинам остановится, перезапустите его, как описано ниже. Чтобы остановить монитор, активируйте окно командной строки или сеанс, в котором он работает, и нажмите Ctrl+C ).
  • Выполните следующую команду, чтобы запустить триггерный монитор WebSphere MQ для менеджера очередей host1/echo.hub и очереди инициации echo.initq:
    runmqtrm -m host1/echo.hub -q echo.initq
    После запуска эта команда генерирует следующий вывод:
    5724-H72 (C) Copyright IBM Corp. 1994, 2004. ALL RIGHTS RESERVED. WebSphere MQ
    trigger monitor started.
    Waiting for a trigger message
  • 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
  • Примечание Если вы столкнулись с трудностями, проверьте атрибуты всех объявленных ранее объектов, а также регистр имен объектов, параметры команд (включая параметры триггерного монитора WebSphere MQ).

    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, чтобы проверить свойства созданного объекта:
    DISPLAY QMODEL('echo.replies.tempdyn') DESCR DEFTYPE
    Обратите внимание на тип определения (атрибут DEFTYPE ): он является временным и динамическим ( TEMPDYN ).
  • 9.4.12. Отправка запроса с использованием временной динамической очереди ответов

    Ниже рассказывается, как запросить службу (см. раздел 9.4.10). При этом в командной строке вызова amqsreq в качестве приемника ответов задана модельная очередь echo.replies.tempdyn.

    Когда программа amqsreq открывает модельную очередь, менеджер очередей автоматически создает временную динамическую очередь на основе атрибутов объекта модельной очереди echo.replies.tempdyn. По завершении программы amqsreq менеджер очередей автоматически удаляет этот объект. Если программа завершена досрочно, например нажатием Ctrl+C во время обработки, удаление будет выполнено через несколько секунд после остановки amqsreq.

    Выполните следующие действия.

  • Запустите amqsreq следующей командой:
    amqsreq echo host1/echo.hub echo.replies.tempdyn
    Программа генерирует следующий вывод:
    Sample AMQSREQ0 start
    server queue is echo
    replies to AMQ.42DD88DE02C70120
    где AMQ.42DD88DE02C70120 – имя динамической очереди.
  • Изучите свойства временной динамической очереди следующим образом.
  • С помощью WebSphere MQ Explorer:
  • Выберите папку Queues менеджера очередей host1/echo.hub.
  • Включите в WebSphere MQ Explorer отображение временных очередей (см. рис 9.1).(рис 9.1) Отображение временных очередей в WebSphere MQ Explorer
  • Обратите внимание на идентичность описания динамической очереди и объекта модельной очереди, на основе которого она создана.
  • Примечание Временные динамические очереди, имена которых начинаются с AMQ.MQEXPLORER, созданы WebSphere MQ Explorer на основе модельной очереди SYSTEM.MQEXPLORER.REPLY.MODEL. WebSphere MQ Explorer использует интерфейс запросов и ответов, поддерживаемый командными серверами менеджеров очередей.
  • С помощью команд MQSC.
  • Выполните следующую команду MQSC в отношении менеджера host1/echo.hub:
    DISPLAY QL('AMQ.*') DEFTYPE DESCR
  • Заметьте, что значение атрибута "описание" ( DESCR ) динамической очереди идентично описанию объекта модельной очереди, на основе которого была создана эта очередь.
  • Заметьте, что с приложением amqsreq работают так же, как с очередью, объявленной вручную.
  • Обратите внимание, что после завершения приложения amqsreq временная динамическая очередь удаляется автоматически.
  • Примечание Приложение-пример amqsreq не поддерживает постоянные динамические очереди, поскольку оно не позволяет указать параметры, необходимые для удаления очереди после того, как она будет закрыта. Однако можно поэкспериментировать с модельными очередями, объявленными как постоянные динамические очереди (тип определения – PERMDYN ), и программой amqsreq. Временные очереди этого типа необходимо удалять вручную с помощью WebSphere MQ Explorer или команд MQSC.

    9.5. Рассылка сообщений по подписке в WebSphere MQ с помощью JMS

    В этом разделе демонстрируется применение брокера публикации-подписки (publish/subscribe broker) WebSphere MQ с примерами кода для WebSphere MQ JMS (Java Message Service).

    Примечание Для изучения этого раздела необходимо установить пакет Java Development Kit (JDK). JDK 1.4.2 находится в каталоге Prereqs на установочном носителе WebSphere MQ V6.0.

    Каталог с исполняемыми файлами java и javac из JDK необходимо добавить к пути ОС.

    Пример кода для WebSphere MQ JMS потребуется слегка изменить, а затем скомпилировать. Однако знать язык программирования Java для этого не обязательно.

    9.5.1. Настройка среды JMS

    Создайте на компьютере, на котором предполагается работать с примерами кода, каталог – в нем будут размещены все файлы и каталоги, необходимые для выполнения описанных ниже действий. Все команды и терминальные сеансы должны работать с этим каталогом.

    Исполняющая среда Java Runtime Environment (JVM), в которой работают Java-приложения, ищет скомпилированные компоненты Java-приложений в каталоге class path, заданном соответствующей переменной окружения.

    При установке WebSphere MQ в Windows путь к компонентам, необходимым для исполнения приложений WebSphere MQ JMS, автоматически добавляется к переменной пути к классам Java, а на платформах UNIX это придется сделать вручную с помощью текущей оболочки.

    Далее предполагается, что независимо от платформы рабочий каталог добавлен в путь к классам Java.

    Для этого выполните следующие действия (в каждом окне командной строки или терминальном окне, где будут выполняться описанные ниже упражнения).

  • В Windows:
  • Перейдите в рабочий каталог, например:
    C:
    cd \wmq_redbook\jmspubsub
  • Выполните следующую команду, чтобы добавить путь к текущему каталогу в путь к классам Java:
    set CLASSPATH=%CLASSPATH%;.
  • В UNIX:
  • Перейдите в рабочий каталог, например так:
    cd ~/wmq_redbook/jmspubsub
  • Выполните следующую команду (с синтаксисом, принятым на вашей UNIX-платформе; не забудьте пробел между знаками "." и "/"):
  • В UNIX (кроме AIX 5L):
    . /opt/mqm/java/bin/setjmsenv
  • В AIX 5L:
    . /usr/mqm/java/bin/setjmsenv
  • Выполните следующую команду, чтобы добавить текущий каталог (а также дополнительный пакет Jar, не добавленный setjmsenv ) в путь к классам Java.
  • В UNIX (кроме AIX 5L):
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/jms.jar:.
    export CLASSPATH
  • В AIX 5L:
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/jms.jar:.
    export CLASSPATH
  • Примечание Если при выполнении описанных ниже упражнений вы столкнулись с ошибками, например:
    Exception in thread "main" java.lang.NoClassDefFoundError
    попробуйте устранить их, выполнив следующие действия. Настройте переменные окружения CLASSPATH вручную, например так.
  • В UNIX (кроме AIX 5L):
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/com.ibm.mq.jar
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/com.ibm.mqjms.jar
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/connector.jar
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/jms.jar CLASSPATH=$CLASSPATH:/
    opt/mqm/java/lib/jndi.jar CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/jta.
    jar CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/providerutil.jar
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/fscontext.jar
    CLASSPATH=$CLASSPATH:/opt/mqm/java/lib/ldap.jar CLASSPATH=$CLASSPATH:.
    export CLASSPATH
  • В AIX 5L:
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/com.ibm.mq.jar
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/com.ibm.mqjms.jar
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/connector.jar
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/jms.jar CLASSPATH=$CLASSPATH:/
    usr/mqm/java/lib/jndi.jar CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/jta.
    jar CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/providerutil.jar
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/fscontext.jar
    CLASSPATH=$CLASSPATH:/usr/mqm/java/lib/ldap.jar CLASSPATH=$CLASSPATH:.
    export CLASSPATH
  • 9.5.2. Создание и запуск менеджера очередей

    Прежде всего необходимо создать и запустить менеджер очередей host1/jmspubsub, обеспечивающий доступ к брокеру публикации-подписки.

    Это делается с помощью управляющих команд WebSphere MQ или WebSphere MQ Explorer (см. раздел 9.4.1).

    9.5.3. Запуск брокера на менеджере очередей

    WebSphere MQ V6.0 поддерживает объект службы, который создается в менеджере очередей и позволяет запустить брокер публикации-подписки на этом менеджере.

    Брокер публикации-подписки WebSphere MQ не запускается по умолчанию. Однако его можно настроить для запуска вместе с менеджером очередей. Это делается с помощью WebSphere MQ Explorer и команд MQSC.

    Применение WebSphere MQ Explorer

    Выполните следующие действия.

  • Выберите папку Services менеджера очередей host1/jmspubsub.
  • Щелкните значок, включающий отображение системных объектов, если это еще не сделано (см. рис 9.2).
  • Щелкните правой кнопкой службу SYSTEM.BROKER и выберите команду Properties.
  • Установите для поля Service значение Queue manager, чтобы брокер публикации-подписки запускался вместе с менеджером очередей.
  • Щелкните OK.
  • Щелкните правой кнопкой службу SYSTEM.BROKER и выберите Start, чтобы запустить брокер.
  • (рис 9.2) Отображение системных объектов в WebSphere MQ Explorer

    Применение команд MQSC

    Выполните следующие действия.

  • Чтобы настроить брокер публикации-подписки WebSphere MQ для запуска вместе с менеджером очередей, выполните следующую команду MQSC в отношении менеджера host1/jmspubsub:
    ALTER SERVICE('SYSTEM.BROKER') CONTROL(QMGR)
  • Чтобы запустить брокер публикации-подписки, выполните следующую команду MQSC в отношении менеджера host1/jmspubsub:
    START SERVICE('SYSTEM.BROKER')
  • 9.5.4. Настройка менеджера очередей для работы с JMS

    WebSphere MQ требует некоторой настройки менеджера очередей, чтобы последний смог работать с JMS-приложениями и использовать возможности брокера публикации-подписки.

    Для этого поставляется специальный сценарий MQSC. Выполните его над менеджером очередей host1/jmspubsub, как показано ниже.

  • В Windows (команда вводится как одна строка):
    runmqsc host1/jmspubsub < "C:\Program Files\IBM\WebSphere MQ \Java\bin\MQJMS_
    PSQ.mqsc"
  • В UNIX (кроме AIX 5L):
    runmqsc host1/jmspubsub < /opt/mqm/java/bin/MQJMS_PSQ.mqsc
  • В AIX 5L:
    runmqsc host1/jmspubsub < /usr/mqm/java/bin/MQJMS_PSQ.mqsc
  • 9.5.5. Настройка простого JMS-провайдера

    JMS – стандартный интерфейс, который поддерживается не только WebSphere MQ. Поэтому операции, специфичные для WebSphere MQ, необходимо сопоставить с операциями, описанными в стандарте JMS.

    Приложения могут оперативно получать сведения о таких сопоставлениях, запрашивая из каталога информацию о том, как предоставляется доступ к JMS. Этот каталог – не обязательно каталог файловой системы, он может быть распределенной системой. Часто в производственной среде такой каталог находится на сетевом сервере LDAP (Lightweight Directory Access Protocol). Такая конфигурация позволяет оперативно вносить изменения. Приложения, использующие JMS, запрашивают сведения о доступе к JMS из каталога через интерфейс под названием JNDI (Java Naming and Directory Interface™).

    В приведенном ниже простом примере для хранения подобной информации в файловой системе создается каталог, далее подготавливается его содержимое при помощи средств WebSphere MQ JMS Administration tool.

    Для работы с WebSphere MQ JMS Administration tool необходимо сделать следующее.

  • В рабочем каталоге, созданном для этого примера, создайте следующий каталог (но не переходите в него):
    jms.provider
  • Создайте в рабочем каталоге файл JMSAdmin.config следующего содержания:
    INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory PROVIDER_
    URL=file:jms.provider SECURITY_AUTHENTICATION=none
    Этот файл служит для настройки инструмента JMS Administration tool с целью подготовки содержимого созданного ранее каталога файловой системы.
  • 9.5.6. Настройка JMS с помощью JMS Administration tool

    Инструмент WebSphere MQ JMS Administration tool создает объекты в каталоге, доступном через интерфейс JNDI. По завершении настройки этот каталог станет доступным приложениям, которые работают c WebSphere MQ и JMS через JNDI. Эти приложения смогут настраивать доступ к JMS, предоставляемый им WebSphere MQ.

    Синтаксис команд WebSphere MQ JMS Administration tool аналогичен таковому у команд MQSC, только имена объектов и атрибутов в нижнем регистре не обязательно заключать в одинарные кавычки.

    Подробнее о WebSphere MQ JMS Administration tool и соответствующих объектах см. WebSphere MQ V6.0 Using Java, SC34-6591.

    Ниже рассказывается, как создать объект Topic Connection Factory, определяющий способ подключения JMS-приложения к провайдеру функций обмена сообщений по принципу публикации-подписки (publish/subscribe), а также объект Topic, определяющий "тему", в которой приложения смогут публиковать свои сообщения и подписываться на получение сообщений этой темы.

    Выполните следующие действия.

  • Запустите инструмент WebSphere MQ JMS Administration tool:
  • в Windows:
    "C:\Program Files\IBM\WebSphere MQ\Java\Bin\JMSAdmin.bat"
  • в UNIX (кроме AIX 5L):
    /opt/mqm/java/bin/JMSAdmin
  • в AIX 5L:
    /usr/mqm/java/bin/JMSAdmin
  • После запуска программа генерирует следующий вывод:
    5724-H72, 5655-L82, 5724-L26 (c) Copyright IBM Corp. 2002,2005. All Rights
    Reserved. Starting Websphere MQ classes for Java(tm) Message Service
    Administration
    InitCtx>
  • Создайте объект Topic Connection Factory (TCF) для подключения к брокеру публикации-подписки, работающему в менеджере очередей host1/jmspubsub. Для этого выполните следующую команду:
    DEFINE TCF(PubSub.TCF) QMANAGER(host1/jmspubsub) TRANSPORT(BIND)
  • Создайте объект Topic для темы MQJMS/Samples/PubSub, выполнив следующую команду:
    DEFINE T(PubSub.T) TOPIC(MQJMS/Samples/PubSub)
  • Остановите WebSphere MQ JMS Administration tool следующей командой:
    END
  • 9.5.7. Копирование примера JMS-приложения WebSphere MQ

    Приложение-пример, иллюстрирующее функции публикации и подписки на сообщения в WebSphere MQ JMS, находится в каталоге.

  • В Windows:
    C:\Program Files\IBM\WebSphere MQ\Tools\Java\jms\JMSPubSub.java
  • В UNIX (кроме AIX 5L):
    /opt/mqm/samp/java/jms/JMSPubSub.java
  • В AIX 5L:
    /usr/mqm/samp/java/jms/JMSPubSub.java
  • Скопируйте этот файл в рабочий каталог, созданный для этого примера.

    9.5.8. Модификация примера JMS-приложения WebSphere MQ

    Ниже показано, как изменить пример JMS-приложения, чтобы он смог работать с созданным ранее каталогом через JNDI, а также с объектами, созданными в этом каталоге при помощи WebSphere MQ JMS Administration tool.

    Также необходимо привести имена объектов в соответствие базовым правилам именования, принятым в данной системе, а не правилам LDAP (последние в данной книге не рассматриваются).

    Выполните следующие действия.

  • Откройте файл JMSPubSub.java в текстовом редакторе.
  • Найдите в коде следующие строки (в примере для WebSphere MQ V6.0 они начинаются со строки 88):
    String CTX_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory"; String INIT_URL =
    "ldap://polaris/cn=PubSub,o=ibm_us,c=us";
  • Отредактируйте следующие строки согласно параметрам конфигурации WebSphere MQ JMS Administration tool:
    String CTX_FACTORY = "com.sun.jndi.fscontext.RefFSContextFactory"; String
    INIT_URL = "file:jms.provider";
  • Найдите в коде следующую строку (в примере для WebSphere MQ V6.0 – строка 98):
    TopicConnectionFactory tcf = (TopicConnectionFactory)ctx.lookup( "cn=PubSub.
    TCF" );
  • Отредактируйте эту строку, подставив имя объекта Topic Connection Factory, созданного ранее при помощи WebSphere MQ JMS Administration tool:
    TopicConnectionFactory tcf = (TopicConnectionFactory)ctx.lookup( "PubSub.TCF" );
  • Найдите в коде следующую строку (в примере для WebSphere MQ V6.0 – строка 112):
    Topic t = (Topic)ctx.lookup( "cn=PubSub.T" );
  • Отредактируйте эту строку, подставив имя объекта Topic, созданного ранее при помощи WebSphere MQ JMS Administration tool:
    Topic t = (Topic)ctx.lookup( "PubSub.T" );
  • Сохраните файл.
  • 9.5.9. Компиляция приложения-примера

    Компиляция примера JMS-приложения для WebSphere MQ, демонстрирующего публикацию и подписку, выполняется следующей командой:

    javac JMSPubSub.java

    В результате ее исполнения в рабочем каталоге создается файл JMSPubSub.class.

    9.5.10. Запуск приложения-примера в режиме подписчика

    Скомпилированный пример JMS-приложения может работать как в режиме издателя сообщения, так и в режиме подписчика. Допускается запуск сразу нескольких экземпляров программ-издателей и подписчиков.

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

  • Откройте окно командной строки или терминальный сеанс, где будет запущен экземпляр программы, который станет подписчиком сообщений. Сделайте настройки, описанные в разделе 9.5.1.
  • Выполните следующую команду, чтобы запустить программу-пример в режиме подписчика:
  • в Windows:
    java JMSPubSub -sub
  • в UNIX (кроме AIX 5L):
    java -D"java.library.path=/opt/mqm/java/lib" JMSPubSub -sub
  • в AIX 5L:
    java -D"java.library.path=/usr/mqm/java/lib" JMSPubSub -sub
  • После запуска программа генерирует следующий вывод:
    [R]eceiveBlock, Receive[N]oWait, Receive[5]Secs, [Q]uit?
  • Чтобы заставить экземпляр-подписчик ожидать публикации следующего сообщения по данной теме, нажмите R, затем Enter.Примечание Эти клавиши необходимо нажимать после получения каждого сообщения.
  • 9.5.11. Запуск программы-примера в режиме издателя

    Скомпилированный пример JMS-приложения может работать как в режиме издателя сообщения, так и в режиме подписчика. Допускается запуск сразу нескольких экземпляров программ-издателей и подписчиков.

    Чтобы запустить программу-пример в режиме издателя, выполните следующие действия:

  • Откройте окно командной строки или терминальный сеанс, где будет запущен экземпляр программы, который станет издателем сообщений. Сделайте настройки, описанные в разделе 9.5.1.
  • Выполните следующую команду, чтобы запустить программу-пример в режиме издателя:
  • в Windows:
    java JMSPubSub -pub
  • в UNIX (кроме AIX 5L):
    java -D"java.library.path=/opt/mqm/java/lib" JMSPubSub -pub
  • в AIX 5L:
    java -D"java.library.path=/usr/mqm/java/lib" JMSPubSub -pub
  • После запуска программа генерирует следующий вывод:
    [P]ublish message, [Q]uit?
  • Чтобы опубликовать сообщение, нажмите P, затем Enter.
  • Введите текст публикуемого сообщения и нажмите Enter. Сообщение будет опубликовано и станет доступным всем ожидающим подписчикам. Получив такое сообщение, подписчик генерирует вывод следующего вида:
    JMS Message class: jms_text JMSType: null
    JMSDeliveryMode: 2
    JMSExpiration: 0 JMSPriority: 4
    JMSMessageID: ID:414d5120686f7374312f6a6d73707562d1dcdd4220001e08
    JMSTimestamp: 1121839520615
    JMSCorrelationID:ID:414d5120686f7374312f6a6d73707562d1dcdd4220006f05
    JMSDestination: topic://MQJMS/Samples/PubSub JMSReplyTo: null JMSRedelivered:
    false
    JMS_IBM_PutDate:20050720
    JMSXAppID:host1/jmspubsub
    JMS_IBM_Format:MQSTR
    JMS_IBM_PutApplType:26
    JMS_IBM_MsgType:8 JMSXUserID:pbroad
    JMS_IBM_PutTime:06052061
    JMSXDeliveryCount:1
    Redbook test message
  • Вернуться к учебному плану