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

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

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >
Аннотация: Эта лекция курса подробно описывает базовые возможности WebSphere MQ по организации очередей сообщений. В ней будут приведены сведения о формируемых в составе менеджера объектах и их использовании. Мы опишем сообщения WebSphere MQ и то, как отправлять и принимать их, используя интерфейс очередей сообщений (MQI)

Отдельные детали организации MQI-интерфейса не связаны ни с одним из таких объектно-ориентированных или стандартизованных интерфейсов прикладного программирования (API), как Java Message Service (JMS), непосредственно. Однако эти API основаны на базовых возможностях MQI-интерфейса. Поэтому понимание объектов, сообщений WebSphere MQ и MQI не становится бесполезным даже при обращении к инфраструктуре через стандартизованные API. В этой лекции мы обсудим следующие вопросы:

  • Интерфейс очередей сообщений
  • Очереди
  • Применение триггеров

6.1. Интерфейс очередей сообщений

Интерфейс очередей сообщений (MQIMessage Queue Interface) служит процедурным интерфейсом отправки и получения сообщений через WebSphere MQ. Поэтому напрямую он может использоваться только из процедурных языков программирования, например C. В то же время немало приложений из числа созданных для обращения к инфраструктуре очередей сообщений WebSphere MQ используют объектно-ориентированный язык, такой как C++ или Java. Впрочем, извлечь выгоду из использования стандартизованных интерфейсов отправки и получения сообщений WebSphere MQ, включая Java Message Service (JMS) или Extended Message Service (XMS), могут и приложения, написанные на процедурных и объектно-ориентированных языках одновременно.

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

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

6.1.1. Дескриптор сообщения WebSphere MQ (MQMD)

Дескриптор сообщения WebSphere MQ (MQMD) связан с каждым из сообщений, находящихся в очереди под управлением менеджера. Это – структура, содержащая ряд полей с описанием сообщения. Размещая сообщение в очереди, приложение передает менеджеру его дескриптор отдельно от его тела. При чтении из очереди приложение получает от менеджера очередей MQMD и тело сообщения отдельно.

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

  • Тип сообщения ( MsgType ).

    В WebSphere MQ сообщения могут помечаться как относящиеся к типам, перечисленным ниже.

    • Дейтаграмма ( datagram ) – не требует обязательного ответа, но может требовать формирования отчета.
    • Запрос ( request ) – требует обязательного ответа.
    • Ответ ( reply ) – выдается как отклик на сообщение-запрос.
    • Отчет ( report ) – строится при обработке сообщения.
  • Отчет ( Report ) и обратная связь ( Feedback ).

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

  • Очередь ответов ( ReplyToQ ).

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

  • Менеджер очереди ответов ( ReplyToQMgr ).

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

  • Идентификатор сообщения ( MsgId ).

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

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

  • Корреляционный идентификатор ( CorrelId ).

    Это поле может использоваться приложениями для связи двух сообщений или связи сообщения и приложения. Чаще всего служит для сопоставления ответа с запросом при обмене сообщениями по принципу "запрос – ответ". Приложение, которое обрабатывает запрос, копирует его идентификатор сообщения в поле корреляционного идентификатора формируемого ответа. Если же в одну очередь приходят ответы сразу на несколько сообщений-запросов или ответы на запросы нескольких приложений, то приложение сможет прочитать ответ, обратившись лишь к сообщениям с нужным корреляционным идентификатором.

  • Признак постоянного сообщения ( Persistence ).

    Это поле определяет, относится ли сообщение к категории постоянных, речь о которых велась в "Средства поддержки очередей сообщений в WebSphere MQ" "Постоянные и непостоянные сообщения". Будучи не заданным приложением-отправителем явно, оно наследует значение признака постоянных сообщений той очереди, в которой размещено.

  • Приоритет ( Priority ).

    Сообщениям может назначаться приоритет от 0 до 9. При этом WebSphere MQ можно настроить так, чтобы сообщения с большим приоритетом передавались приложениям раньше тех сообщений, чей приоритет ниже.

  • Идентификатор набора кодовых символов (CCSID – CodedCharSetId ).

    CCSID задает набор символов, который отображает определенные символы в те или иные байты или наборы байтов. Для данных, именуемых строковыми и представляющих текст, WebSphere MQ может производить конверсию из одного набора символов в другой так, что одни и те же символы будут представлены одними и теми же данными в сообщении. Мы говорили об этом в "Создание приложений для доступа к инфраструктуре WebSphere MQ" "Преобразование данных". По умолчанию поле имеет значение CCSID менеджера, которому передано конкретное сообщение; последнее же чаще всего равно CCSID соответствующего компьютера.

  • Кодировка ( Encoding ).

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

  • Формат ( Format ).

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

  • Время ( PutTime ) и дата ( PutDate ) размещения в очереди.

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

  • Срок жизни ( Expiry ).

    Сообщениям может назначаться период существования, помещаемый в это поле и измеряемый в десятых долях секунды. Если сообщение остается в инфраструктуре очередей WebSphere MQ дольше этого времени, оно становится устаревшим, недоступным для приложений и пригодным для удаления менеджером очередей сообщений. Устаревшие сообщения удаляются исключительно при попытке извлечения или просмотра их приложением. WebSphere MQ V6.0 содержит в своем составе задание контроля срока существования (expiry task), которое периодически просматривает все сообщения всех без исключения очередей и принудительно удаляет устаревшие сообщения.

MQMD содержит сведения о приложении, поместившем сообщение в очередь, и идентификаторе пользователя, от чьего имени это приложение выполнялось.

Также в MQMD входит информация, относящаяся к сообщениям, входящим в группы, или сегменты. О сообщениях такого рода мы говорили в "Создание приложений для доступа к инфраструктуре WebSphere MQ" "Сегментация сообщений".

6.1.2. Коды завершения и причины

Вызов любой из функций MQI-интерфейса завершается возвратом кода завершения ( CompCode ) и причины ( Reason ):

  • Код завершения.

    Может иметь одно из трех следующих значений:

    • MQCC_OK: обращение к функции успешно завершено.
    • MQCC_WARNING: функция выполнена частично. Подробности отражены в коде причины.
    • MQCC_FAILED: вызов функции неудачен.
  • Код причины.

    По завершении вызова любой функции она может вернуть один из многих кодов причины; какие-то из них представляют признаки сбоя, какие-то – частичное выполнение. Подробнее см. раздел "Reason" описания полей (Fields) конкретных вызываемых функций в руководстве WebSphere MQ Application Programming Reference, SC34-6596.

    Код причины – целочисленное значение. Для получения символьного представления десятичного или шестнадцатеричного числового значения или числового значения из символьного представления используйте команду WebSphere MQ mqrc. В следующем примере для кода причины MQRC_NO_MSG_AVAILABLE будет выдана одинаковая информация:

    mqrc MQRC_NO_MSG_AVAILABLE
    mqrc 2033
    mqrc 0x7F1
    mqrc 0x000007f1

    Подробности см. в "Устранение неполадок" "Коды причины".

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >
Михаил Завалко
Михаил Завалко
Беларусь, Минск
Artem Bardakov
Artem Bardakov
Россия