Опубликован: 14.12.2004 | Уровень: для всех | Доступ: платный | ВУЗ: Компания IBM
Лекция 11:

Технология публикация-подписка для WebSphere MQ

< Лекция 10 || Лекция 11: 123 || Лекция 12 >
Аннотация: В лекции рассмотрена весьма популярная в последние годы модель публикация-подписка (Publish/Subscribe), позволяющая поставлять часто меняющуюся информацию от различных поставщиков к многочисленным потребителям этой информации. Изложена методология создания приложения-издателя и приложения-подписчика. Приведены примеры работы механизмов публикация-подписка при подписке на тему спорт/футбол/события и программа издателя amqsgama из состава SupportPacs MA0C IBM для работы по данной теме.

Общие сведения о модели публикация-подписка

Механизм публикация-подписка ( Publish/Subscribe ) позволяет поставлять информацию от поставщика к потребителю. Эта модель стала особенно популярной в последние годы благодаря тому, что часто меняющаяся информация может поставляться постоянно многим получателям. Одним из типичных примеров такой информации являются данные на рынке акций и валют. В такой модели издателю необязательно знать о местонахождении получателя и наоборот. В модели Request/Reply движение информации начинается по запросу потребителя (клиента). В модели Publish/Subscribe движение информации начинается по мере ее появления и поступления от поставщика.

Поставщика информации принято называть издатель (publisher). Издатель предлагает информацию на определенные темы. Потребитель информации называется подписчиком (subscriber), он подписывается на получение информации на определенные темы. Информация, которую получает один подписчик, может передаваться другим подписчикам.

Информация, посылаемая как сообщение, характеризуется темой. Издатель посылает информацию только на те темы, на которые сделана подписка. Взаимодействие между издателями и подписчиками контролируется посредником или брокером ( broker ). Взаимосвязанные темы группируются совместно в потоки (stream). Издатель может применять потоки для ограничения диапазонов тем издателей и подписчиков. Через брокера идет поток, который использует все темы. На рис.10.1 представлена схема, иллюстрирующая взаимодействие брокеров, издателей и подписчиков.

Схема взаимодействия брокеров, издателей и подписчиков

Рис. 10.1. Схема взаимодействия брокеров, издателей и подписчиков

Общий подход работы механизма Publish/Subscribe лучше всего иллюстрируется на примере трех видов сценариев, которые реализуются на основе командных сообщений.

Сценарий издатель - брокер.

  1. Издатель регистрирует свое намерение публиковать информацию по определенным темам.
  2. Издатель посылает сообщение-публикацию брокеру, содержащее дату публикации. Сообщение может быть перенаправлено брокером непосредственно подписчикам, или может храниться у брокера, пока его не востребует подписчик.
  3. Издатель может послать сообщение брокеру, чтобы хранящаяся у него публикация была удалена.
  4. Издатель может отказаться от регистрации у брокера, когда он заканчивает отправку сообщений на определенную тему.

Сценарий подписчик - брокеру.

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

Сценарий брокер - брокер реализуется в виде следующих взаимодействий

  1. брокеры могут обмениваться регистрациями подписчиков и прекращать регистрации.
  2. брокеры могут обмениваться публикациями и требованиями на удаление публикаций.
  3. брокеры могут обмениваться информацией о самих себе.

Механизм Publish/Subscribe поддерживает брокеров на основе функций WebSphere MQ на платформах для AIX, HP-UX, Linux, Windows NT, Microsoft Windows 2000 и Sun Solaris. Допустимо иметь по одному брокеру на менеджере очередей. брокер имеет то же самое имя, что и менеджер. Приложения могут писаться на основе стандартных приемов программирования с использованием технологий Message Queue Interface (MQI) или Application Messaging Interface (AMI). Издатели и подписчики могут быть на любых платформах, на которых поддерживается WebSphere MQ, например, издатель - на OS/390 и подписчик - на OS/2. брокеры могут объединяться в сеть, в которой есть корневой брокер, брокеры -родители и брокеры -дети.

Для работы с механизмом Publish/Subscribe существует несколько основных функций или, иначе называемых, командных сообщений, в которых помещается команда брокеру. Синтаксис этих функций имеет простые правила при определении темы. Тема задается строкой длиной не более 256 байт без пробелов и двойных кавычек ("). Тема и подтемы разделяются символом "/" (без пробелов), например, для рынка акций формат темы задается следующим образом:

Регион/СекторРынка/Компания

Конкретные темы выглядят следующим образом:

NewYork/InformationTechnology/IBM

Этот синтаксис разрешает в строках иметь символы:

* - означающий ноль или любое количество 
    произвольных символов;
? – означающий один произвольный символ.

Данный синтаксис позволит в дальнейшем определить, например, такие темы для подписки на рынке акций как:

*               получение всех цен на акции
                со всех рынков мира;
London/*        получение всех цен на акции 
                с Лондонской биржи;
NewYork/Banks/* получение цен акций всех 
                нью-йоркских банков;
*/*/IBM         получение всех цен на акции 
                компании ИБМ на всех рынках мира.

Символ % позволяет использовать специальные символы * и ? в строках, например, 'ABC%*D' означает 'ABC*D'.

В числе основных функций для работы с механизмом Publish/Subscribe (MQPSCommand) следует назвать:

RegPub Регистрация издателя (Register Publisher)
RegSub Регистрация подписчика (Register Subscriber)
Publish Публикация
ReqUpdate Запрос от издателя к брокеру на обновление публикации на заданную тему (Request Update)
DeletePub Удаление публикации (Delete Publication)
DeregPub Отказ от регистрации издателя (Deregister Publisher)
DeregSub Отказ от регистрации подписчика (Deregister Subscriber)

Более подробно эти функции будут рассмотрены на примере ниже, а описание их форматов можно найти в документации [ 18 ] , [ 19 ] .

Для осуществления работы издателя и подписчика используется формат MQRFH (Rules and Formatting Header - RF Header) WebSphere MQ сообщения. формат MQRFH представляет собой структуру заголовка переменной длины, в которую приложение размещает данные в виде префикса при публикации. В эту структуру входят следующие переменные:

typedef struct tagMQRFH {
MQCHAR4 StrucId;          
    /* Идентификатор структуры */
MQLONG Version;           
    /* Номер версии структуры */
MQLONG StrucLength;       
    /* Общая длина MQRFH */
MQLONG Encoding;          
    /* Data encoding */
MQLONG CodedCharSetId;    
    /* Идентификатор множества перекодировки */
MQCHAR8 Format;           
    /* Имя формата */
MQLONG Flags;             
    /* Флаги */
} MQRFH;

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

< Лекция 10 || Лекция 11: 123 || Лекция 12 >
Вадим Горячев
Вадим Горячев
Россия
Artem Bardakov
Artem Bardakov
Россия