Обмен сообщениями с использованием WebSphere MQ: практическое введение
9.5.2. Создание и запуск менеджера очередей
Прежде всего необходимо создать и запустить менеджер очередей host1/jmspubsub, обеспечивающий доступ к брокеру публикации-подписки.
Это делается с помощью управляющих команд WebSphere MQ или WebSphere MQ Explorer (см. "Обмен сообщениями с использованием WebSphere MQ: практическое введение" ).
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, чтобы запустить брокер.
Применение команд 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 следующего содержания:Этот файл служит для настройки инструмента JMS Administration tool с целью подготовки содержимого созданного ранее каталога файловой системы.
INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory PROVIDER_ URL=file:jms.provider SECURITY_AUTHENTICATION=none
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>
- в Windows:
- Создайте объект 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-приложения может работать как в режиме издателя сообщения, так и в режиме подписчика. Допускается запуск сразу нескольких экземпляров программ-издателей и подписчиков.
Чтобы запустить программу-пример в режиме подписчика, выполните следующие действия.
- Откройте окно командной строки или терминальный сеанс, где будет запущен экземпляр программы, который станет подписчиком сообщений. Сделайте настройки, описанные в "Обмен сообщениями с использованием WebSphere MQ: практическое введение" .
- Выполните следующую команду, чтобы запустить программу-пример в режиме подписчика:
- в 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?
- в Windows:
- Чтобы заставить экземпляр-подписчик ожидать публикации следующего сообщения по данной теме, нажмите R, затем Enter.Примечание Эти клавиши необходимо нажимать после получения каждого сообщения.
9.5.11. Запуск программы-примера в режиме издателя
Скомпилированный пример JMS-приложения может работать как в режиме издателя сообщения, так и в режиме подписчика. Допускается запуск сразу нескольких экземпляров программ-издателей и подписчиков.
Чтобы запустить программу-пример в режиме издателя, выполните следующие действия:
- Откройте окно командной строки или терминальный сеанс, где будет запущен экземпляр программы, который станет издателем сообщений. Сделайте настройки, описанные в "Обмен сообщениями с использованием WebSphere MQ: практическое введение" .
- Выполните следующую команду, чтобы запустить программу-пример в режиме издателя:
- в 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?
- в Windows:
- Чтобы опубликовать сообщение, нажмите 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