Беларусь, Минск |
Взаимодействие менеджеров очередей и клиентские подключения в WebSphere MQ
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-получатель – размещая их в очереди.
Чтобы обеспечить защиту от потери или двукратной доставки сообщений при сбоях коммуникации, эти две независимые единицы работы должны быть скоординированы обоими MCA. Для этого агенты должны "договориться" по сети о фиксации или откате обоими единицы работы, если связь оборвется.
Этот процесс требует дополнительного сетевого обмена, а потому обычно не производится для каждого передаваемого по каналу сообщения. Отдельные пересылаемые сообщения объединяются и образуют пакет (batch), в котором все сообщения либо фиксируются в приемных очередях, либо возвращаются в транспортную очередь как одно целое.
Предельное количество содержащихся в пакете сообщений называется размером пакета (batch size). Настроить это значение позволяют одноименные атрибуты ( BATCHSZ – batch size) канального объекта MCA-отправителя и MCA-получателя. Используемый размер пакета принимается равным меньшему из значений двух атрибутов.
Иногда для заполнения пакета в транспортной очереди бывает недостаточно сообщений. В этом случае в ожидании новых сообщений в транспортной очереди MCA-отправитель берет короткую паузу, фиксируя уже отосланные сообщения только по ее истечении. Количество миллисекунд ожидания до фиксации пакета сообщений MCA-отправителем определяется атрибутом пакетного интервала ( BATCHINT – batch interval). Его значением управляет канальный объект MCA-отправителя.
7.4.3. Неоднозначные каналы и порядковые номера сообщения
Если сетевой обмен был нарушен при подтверждении пакета двумя агентами MCA, такой канал может превратиться в неоднозначный (indoubt). Причина этого в том, что сообщение с запросом на подтверждение было отправлено, а ответ на него не получен. Отправившему запрос агенту неизвестно, действительно ли агент-партнер принял его запрос, а связь нарушилась уже во время ответа, или же сбой случился при отправке запроса.
Единица работы одного из каналов должна при этом оставаться в состоянии готовности (prepared) к фиксации или откату в зависимости от действий, предпринятых агентом-партнером. В целях автоматического разрешения неоднозначного состояния канала при его перезапуске оба агента поддерживают порядковые номера, связанные с количеством успешно переданных по каналу сообщений.
Неоднозначное состояние канала представлено значением YES атрибута INDOUBT его записи состояния.
7.4.4. Интервалы разъединения
Оставлять канал связи открытым неопределенно долгое время может быть неразумно. Поэтому WebSphere MQ позволяет автоматически закрывать канал сообщений, если за указанный интервал по нему не передано ни единого сообщения.
Этот интервал времени задается в секундах, а для задания служит атрибут "интервал разъединения" ( DISCINT – disconnect interval) канального объекта MCA-отправителя. Для указания на то, что канал связи должен оставаться открытым сколь угодно долгое время, используется нулевое значение интервала.
7.4.5. Названия соединений
Для установления канала между агентами отправителя и получателя один из агентов MCA должен связаться с менеджером очередей – партнером, используя объект-слушатель того менеджера.
В зависимости от типа канального объекта с описанием MCA на каждом конце канала запуск последнего допустим с любой стороны подключения. Об этом мы еще скажем в "Взаимодействие менеджеров очередей и клиентские подключения в WebSphere MQ" "Допустимые пары объектов – распределенных каналов сообщений".
Атрибут "название соединения" ( CONNAME – connection name) объекта-канала определяет название TCP/IP-хоста или IP-адрес и порт слушателя партнерского менеджера очередей сообщений.
Названия соединений и слушатели обсуждались нами в "Менеджеры очередей: общее представление и настройка" "Сетевой доступ к менеджеру". Название соединения задается следующим образом:
Имя_хоста.или.IP-адрес(порт)
Если порт не указан, используется известный TCP/IP-порт WebSphere MQ с номером 1414.
DEFINE CHANNEL(TO.EXAMPLE.PAYROLL) CHLTYPE(SDR) + XMITQ(EXAMPLE.PAYROLL) + CONNAME('payroll.example.com(9001)')
7.4.6. Объекты receiver-каналов
Объект receiver-канала задается на менеджере для определения атрибутов MCA-получателя, которому другие менеджеры очередей могут посылать сообщения.
Объект receiver-канала нельзя использовать для инициирования канала.
Для описания объектов receiver-каналов воспользуйтесь одним из двух методов.
7.4.7. Объекты requester-каналов
Объект requester-канала задается на менеджере для определения атрибутов MCA-получателя, которому другие менеджеры очередей могут посылать сообщения.
Объект requester-канала можно использовать для инициирования канала.
Для описания объектов requester-каналов воспользуйтесь одним из двух методов.
Обязательный атрибут – название соединения ( CONNAME ).
7.4.8. Объекты sender-каналов
Объект sender-канала задается на менеджере очередей сообщений для определения атрибутов MCA-отправителя, который из указанной транспортной очереди может посылать сообщения другим менеджерам.
Одновременно активным для одной транспортной очереди может быть только один агент sender-канала или server-канала.
Объект sender-канала можно использовать для инициирования канала.
Для описания объектов sender-каналов воспользуйтесь одним из двух методов.
Обязательные атрибуты – название транспортной очереди ( XMITQ ) и название соединения ( CONNAME ).
7.4.9. Объекты server-каналов
Объект server-канала задается на менеджере очередей сообщений для определения атрибутов MCA-отправителя, который из указанной транспортной очереди может посылать сообщения другим менеджерам.
Одновременно активным для одной транспортной очереди может быть только один агент sender-канала или server-канала.
Объект server-канала можно использовать для инициирования канала, если название соединения входит в определение объекта. Если название соединения задано, говорят, что объект server-канала определен полностью (fully qualified).
Для описания объектов server-каналов используйте один из двух методов.
Обязательный атрибут – название транспортной очереди ( XMITQ ).