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

Технические основы организации очередей сообщений

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >

6.1.8. MQBEGIN

MQI-функция MQBEGIN применяется только в том случае, если менеджер очередей сообщений настроен так, чтобы координировать глобальные единицы работы, включающие операции в системе баз данных. При вызове функции MQBEGIN приложением в системе начинается новая единица работы, включающая обновления базы данных, корректно сконфигурированной для участия в координируемых WebSphere MQ единицах работы, и вызовы MQPUT/MQGET, производимые под управлением точки синхронизации.

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

Глобальные единицы работы мы обсуждали в "Создание приложений для доступа к инфраструктуре WebSphere MQ" "Глобальные единицы работы".

6.1.9. MQCMIT и MQBACK

MQI-функция MQCMIT предназначена для фиксации текущей единицы работы. Локальная единица работы, включающая только операции WebSphere MQ, содержит все вызовы функций MQPUT и MQGET под управлением точки синхронизации, произведенные с момента подключения приложения или последнего вызова MQCMIT или MQBACK. Глобальная единица работы, которая координируется WebSphere MQ и где содержатся операции в системе баз данных и WebSphere MQ, содержит все вызовы MQPUT и MQGET под управлением точки синхронизации с момента последнего обращения к MQBEGIN, MQCMIT или MQBACK.

MQI-функция MQBACK предназначена для отмены текущей единицы работы, которую образуют те же самые операции, что в случае с функцией MQCMIT. Отмена единицы работы аннулирует все операции, или производит откат. Изъятые с удалением сообщения возвращаются в очередь, а размещенные – удаляются из нее, так и не став доступными для других приложений.

6.1.10. MQINQ и MQSET

MQI-функция MQINQ служит для получения значений заданных атрибутов объектов, открытых в целях их запроса.

На вход функции MQINQ передается совокупность селекторов (selectors). Она содержит названия всех атрибутов, запрос значений которых осуществляется.

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

MQI-функция MQSET служит для установки значений заданных атрибутов объектов, открытых для их задания.

Входные параметры MQSET – набор селекторов и буферы с новыми значениями атрибутов.

6.1.11. MQDISC

Вызов функции MQDISC должен сопровождать каждый вызов MQCONN и MQCONNX со стороны приложения. Если приложение не смогло произвести обращение к MQDISC перед своим закрытием или было аварийно завершено, WebSphere MQ очищает соединение, обнаружив, что приложение больше не выполняется.

Если WebSphere MQ координирует локальные или глобальные единицы работы, при выполнении MQDISC менеджер предпринимает попытку вызова MQCMIT. Если вызов функции MQCMIT завершается неудачно, приложение уведомляется об этом кодом возврата функции MQDISC. Если перед своим закрытием приложение не выполнит MQDISC, менеджер очередей произведет вызов функции MQBACK, обнаружив, что приложение больше не выполняется.

6.2. Очереди

Понятие "очередь" (queue) встречается в терминологии WebSphere MQ довольно часто. Однако в разных контекстах оно имеет неодинаковые значения.

  • Объект-очередь.

    Объекты-очереди – объекты, определенные в составе менеджера очередей сообщений. При выполнении над менеджером функции MQOPEN могут определяться своим названием. Для описания и настройки служат MQSC или WebSphere MQ Explorer.

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

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

  • Очередь сообщений.

    Реально представлять очередь, которая входит в менеджер и может содержать сообщения, способен лишь один тип объекта – объект "локальная очередь" (local queue). Особый случай локальной очереди – транспортная очередь, которая служит промежуточной очередью, объединяющей менеджеры.

    В составе менеджеров локальные очереди могут быть определены явно.

    Кроме того, они могут быть определены динамически – на базе объектов модельных очередей (model queue) посредством вызова MQOPEN с названием модельной очереди в роли параметра. Обычно определенные динамически локальные очереди носят название динамических (dynamic queues). Они удаляются при вызове MQCLOSE. Временные динамические очереди могут автоматически удаляться менеджером очередей сообщений и при отключении приложения.

  • Известный локальному менеджеру кластерный экземпляр очереди.

    В большинстве случаев их называют кластерными очередями сообщений (cluster queues). Кластерная очередь – не настоящий объект-очередь под управлением локального менеджера, а локальное – по отношению к менеджеру – представление экземпляра объекта-очереди, существующего в любой точке кластера. Фактический объект-очередь может находиться под управлением локального менеджера, а может располагаться и на другом менеджере очередей в кластере. В составе менеджера с одним и тем же названием может существовать множество кластерных очередей сообщений. Подробнее кластеры менеджеров очередей и кластерные очереди сообщений мы обсудим в "Кластеры менеджеров очередей" "Кластеры менеджеров очередей".

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

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

6.2.1. Разрешение названия очереди

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

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

Процесс определения очередного пункта доставки сообщения на маршруте по предоставленным приложением сведениям о месте назначения сообщения называется разрешением названия очереди (queue name resolution). Он производится менеджером очередей сообщений при каждом получении сообщения от приложения или другого менеджера.

Разрешение названия очереди выполняется и при каждом вызове MQOPEN для открытия очереди перед размещением сообщений. При этом, используя данные из структуры MQOD, переданной при вызове MQOPEN, – название объекта и название менеджера очередей объекта, – менеджер очередей сообщений пытается восстановить название нужной целевой очереди и менеджера для данного сообщения.

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

  • Если при разрешении названия оказалось, что очередь назначения локальна по отношению к данному менеджеру, то сообщение размещается непосредственно в ней.
  • Если при разрешении названия оказалось, что место назначения сообщения связано с другим – известным текущему – менеджером, то сообщение размещается в транспортной очереди для отправки этому известному менеджеру. Данный шаг требует включения в сообщение дополнительной информации, дабы при достижении им удаленного менеджера название очереди могло быть снова разрешено. Эту информацию называют заголовком транспортной очереди. О том, что происходит с сообщением после размещения в транспортной очереди, читайте в "Взаимодействие менеджеров очередей и клиентские подключения в WebSphere MQ" "Отправка сообщений".

Графическая схема разрешения названия приведена на рис. 6.1. Все типы объектов-очередей, показанные на нем значками в прямоугольнике "Разрешение названия очереди", будут описаны нами в этой главе. Обратите внимание, что значки на рис. 6.1 полностью соответствуют тем, что служат для представления объектов каждого типа в WebSphere MQ Explorer.

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

Примечание Влияние вхождения менеджера в кластер на разрешение названия очереди мы обсудим в "Кластеры менеджеров очередей" "Совместный доступ к объектам-очередям в кластерах".
Разрешение названия очереди

увеличить изображение
Рис. 6.1. Разрешение названия очереди

6.2.2. Объекты локальных очередей и транспортные очереди

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

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

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

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

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

Разрешение названия очереди в присутствии объекта локальной очереди

Рис. 6.2. Разрешение названия очереди в присутствии объекта локальной очереди
Транспортные очереди

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

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

Передача сообщений из транспортной очереди удаленному менеджеру производится по каналу сообщений. Каналы сообщений мы обсудим в "Взаимодействие менеджеров очередей и клиентские подключения в WebSphere MQ" "Отправка сообщений".

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

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

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

Рис 6.3 показывает, как приложение отправляет сообщение и указывает название менеджера очередей объекта. С ним совпадает название транспортной очереди, а значит, именно в ней сообщение и будет размещено.

Разрешение названия очереди в присутствии транспортной очереди

Рис. 6.3. Разрешение названия очереди в присутствии транспортной очереди
Ручное задание локальных объектов

Принадлежащий локальной очереди атрибут "тип определения" ( DEFTYPEdefinition type) дает возможность разделить все локальные очереди на те, которые описывались вручную, и те, что динамически сформированы из объектов модельных очередей. Атрибут "тип определения" ( DEFTYPE ) вручную созданных локальных очередей имеет значение PREDEFINED.

Примечание Атрибут "тип определения" ( DEFTYPE ) не проводит различий между локальными очередями, которые автоматически созданы WebSphere MQ при организации менеджера, и очередями, которые создал администратор.

Создать локальные очереди вручную можно, используя один из перечисленных методов.

  • При помощи MQSC-команды DEFINE QLOCAL.
  • При помощи WebSphere MQ Explorer:
    • щелкните правой кнопкой мыши по папке Queues конкретного менеджера очередей сообщений в навигаторе WebSphere MQ Explorer;
    • выберите в меню New -> Local Queue ;
    • следуйте указаниям мастера New Local Queue.
< Лекция 5 || Лекция 6: 12345 || Лекция 7 >
Михаил Завалко
Михаил Завалко
Беларусь, Минск
Artem Bardakov
Artem Bardakov
Россия