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

Взаимодействие менеджеров очередей и клиентские подключения в WebSphere MQ

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >

7.4. Распределенные каналы сообщений

Распределенный канал сообщений – это канал, принимающий сообщения из конкретной транспортной очереди одного менеджера и передающий эти сообщения очередям другого заданного удаленного менеджера.

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

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

7.4.1. Отправка сообщений

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

  • MCA – отправитель.

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

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

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

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

  • Название удаленной очереди.

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

  • Название удаленного менеджера.

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

  • Дескриптор исходного сообщения.

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

Связь пары менеджеров очередей по каналу показана на рис. 7.2.

Коммуникация двух менеджеров очередей сообщений с использованием агентов отправителя и получателя

увеличить изображение
Рис. 7.2. Коммуникация двух менеджеров очередей сообщений с использованием агентов отправителя и получателя

7.4.2. Пакеты

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

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

Примечание По умолчанию каналы сообщений не пользуются единицами работы для передачи непостоянных сообщений. Это означает, что сбои связи могут приводить к их потере. Такое стандартное поведение канала можно изменить, выбрав нормальную, а не высокую скорость передачи непостоянных сообщений (NPMSPEED – nonpersistent message speed) канальным объектом MCA-отправителя или MCA-получателя.

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

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

Предельное количество содержащихся в пакете сообщений называется размером пакета (batch size). Настроить это значение позволяют одноименные атрибуты ( BATCHSZ – batch size) канального объекта MCA-отправителя и MCA-получателя. Используемый размер пакета принимается равным меньшему из значений двух атрибутов.

Иногда для заполнения пакета в транспортной очереди бывает недостаточно сообщений. В этом случае в ожидании новых сообщений в транспортной очереди MCA-отправитель берет короткую паузу, фиксируя уже отосланные сообщения только по ее истечении. Количество миллисекунд ожидания до фиксации пакета сообщений MCA-отправителем определяется атрибутом пакетного интервала ( BATCHINT – batch interval). Его значением управляет канальный объект MCA-отправителя.

7.4.3. Неоднозначные каналы и порядковые номера сообщения

Если сетевой обмен был нарушен при подтверждении пакета двумя агентами MCA, такой канал может превратиться в неоднозначный (indoubt). Причина этого в том, что сообщение с запросом на подтверждение было отправлено, а ответ на него не получен. Отправившему запрос агенту неизвестно, действительно ли агент-партнер принял его запрос, а связь нарушилась уже во время ответа, или же сбой случился при отправке запроса.

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

Неоднозначное состояние канала представлено значением YES атрибута INDOUBT его записи состояния.

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

7.4.4. Интервалы разъединения

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

Этот интервал времени задается в секундах, а для задания служит атрибут "интервал разъединения" ( DISCINTdisconnect interval) канального объекта MCA-отправителя. Для указания на то, что канал связи должен оставаться открытым сколь угодно долгое время, используется нулевое значение интервала.

7.4.5. Названия соединений

Для установления канала между агентами отправителя и получателя один из агентов MCA должен связаться с менеджером очередей – партнером, используя объект-слушатель того менеджера.

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

Атрибут "название соединения" ( CONNAME – connection name) объекта-канала определяет название TCP/IP-хоста или IP-адрес и порт слушателя партнерского менеджера очередей сообщений.

Названия соединений и слушатели обсуждались нами в "Менеджеры очередей: общее представление и настройка" "Сетевой доступ к менеджеру". Название соединения задается следующим образом:

Имя_хоста.или.IP-адрес(порт)

Если порт не указан, используется известный TCP/IP-порт WebSphere MQ с номером 1414.

Примечание При описании каналов через MQSC название соединения должно быть ограничено апострофами, например:
DEFINE CHANNEL(TO.EXAMPLE.PAYROLL) CHLTYPE(SDR) +
       XMITQ(EXAMPLE.PAYROLL) +
       CONNAME('payroll.example.com(9001)')

7.4.6. Объекты receiver-каналов

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

Объект receiver-канала нельзя использовать для инициирования канала.

Для описания объектов receiver-каналов воспользуйтесь одним из двух методов.

  • Командой MQSC DEFINE CHANNEL CHLTYPE(RCVR).
  • WebSphere MQ Explorer:
    • щелкните правой кнопкой мыши по папке Channels конкретного менеджера очередей сообщений в навигаторе WebSphere MQ Explorer;
    • выберите в меню New -> Receiver Channel.

7.4.7. Объекты requester-каналов

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

Объект requester-канала можно использовать для инициирования канала.

Для описания объектов requester-каналов воспользуйтесь одним из двух методов.

  • Командой MQSC DEFINE CHANNEL CHLTYPE(RQSTR).
  • WebSphere MQ Explorer:
    • щелкните правой кнопкой мыши по папке Channels конкретного менеджера очередей сообщений в навигаторе WebSphere MQ Explorer;
    • выберите в меню New -> Requester Channel.

Обязательный атрибут – название соединения ( CONNAME ).

7.4.8. Объекты sender-каналов

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

Одновременно активным для одной транспортной очереди может быть только один агент sender-канала или server-канала.

Объект sender-канала можно использовать для инициирования канала.

Для описания объектов sender-каналов воспользуйтесь одним из двух методов.

  • Командой MQSC DEFINE CHANNEL CHLTYPE(SDR).
  • WebSphere MQ Explorer:
    • щелкните правой кнопкой мыши по папке Channels конкретного менеджера очередей сообщений в навигаторе WebSphere MQ Explorer;
    • выберите в меню New -> Sender Channel.

Обязательные атрибуты – название транспортной очереди ( XMITQ ) и название соединения ( CONNAME ).

7.4.9. Объекты server-каналов

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

Одновременно активным для одной транспортной очереди может быть только один агент sender-канала или server-канала.

Объект server-канала можно использовать для инициирования канала, если название соединения входит в определение объекта. Если название соединения задано, говорят, что объект server-канала определен полностью (fully qualified).

Для описания объектов server-каналов используйте один из двух методов.

  • Команду MQSC DEFINE CHANNEL CHLTYPE(SVR).
  • WebSphere MQ Explorer:
    • щелкните правой кнопкой мыши по папке Channels конкретного менеджера очередей сообщений в навигаторе WebSphere MQ Explorer;
    • выберите в меню New -> Server Channel.

Обязательный атрибут – название транспортной очереди ( XMITQ ).

Примечание Не смешивайте объекты server-каналов и описанные в "Взаимодействие менеджеров очередей и клиентские подключения в WebSphere MQ" канальные объекты серверных подключений.
< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Михаил Завалко
Михаил Завалко
Беларусь, Минск
Artem Bardakov
Artem Bardakov
Россия