Компания IBM
Опубликован: 14.12.2004 | Доступ: свободный | Студентов: 1531 / 139 | Оценка: 4.36 / 3.98 | Длительность: 16:32:00
ISBN: 978-5-9556-0031-4
Специальности: Системный архитектор
Лекция 9:

Программный интерфейс MQI. Основные функции

  1. MQGET - функция для просмотра, извлечения и удаления сообщений из очереди.

    Синтаксис:

    MQGET (Hconn, Hobj, MsgDesc, GetMsgOpts, 
           BufferLength,Buffer, DataLength, 
           CompCode, Reason)

    где:

    Hconn - идентификатор связи с менеджером очередей, полученный от MQCONN
    Hobj - идентификатор объекта, полученный от MQOPEN
    MsgDesc - описание сообщения MQMD
    GetMsgOpts - опции объекта MQGMO для чтения сообщений
    BufferLength - длина буфера Buffer, в который считывается сообщение
    Buffer - буфер, в который считывается сообщение
    DataLength - длина сообщения
    CompCode - код завершения, принимающий одно из трех значений: MQCC_OK, MQCC_WARNING, MQCC_FAILED
    Reason - код ошибки, детализирующий код завершения.

    Hconn и Hobj – это идентификаторы, полученные от MQCONN и MQOPEN , соответственно.

    Описание сообщения MQMD – это ссылка на структуру объекта из библиотеки WebSphere MQ. Эта структура записывается следующим образом (табл.8.3).

    Таблица 8.3. Структура объекта MQMD
    Имя поля MQMD Тип поля Имя константы Значение по умолчанию
    StrucId MQCHAR4 MQMD_STRUC_ID 'MDbb'
    Version MQLONG MQMD_VERSION_1 1
    Report MQLONG MQRO_NONE 0
    MsgType MQLONG MQMT_DATAGRAM 8
    Expiry MQLONG MQEI_UNLIMITED MQEI_UNLIMITED
    Feedback MQLONG MQFB_NONE 0
    Encoding MQLONG MQENC_NATIVE В зависимости от среды
    CodedCharSetId MQLONG MQCCSI_Q_MGR 0
    Format MQCHAR8 MQFMT_NONE Пробел
    Priority MQLONG MQPRI_PRIORITY_AS_Q_DEF -1
    Persistence MQLONG MQPER_PERSISTENCE_AS_Q_DEF 2
    MsgId MQBYTE24 MQMI_NONE Nulls
    CorrelId MQBYTE24 MQCI_NONE Nulls
    BackoutCount MQLONG Нет 0
    ReplyToQ MQCHAR48 Нет Строка со значением Null или пробел
    ReplyToQMgr MQCHAR48 Нет Строка со значением Null или пробел
    UserIdentifier MQCHAR12 Нет Строка со значением Null или пробел
    AccountingToken MQBYTE32 MQACT_NONE Nulls
    ApplIdentityData MQBYTE32 Нет Строка со значением Null или пробел
    PutApplType MQLONG MQAT_NO_CONTEXT 0
    PutApplName MQCHAR28 Нет Строка со значением Null или пробел
    PutDate MQCHAR8 Нет Строка со значением Null или пробел
    PutTime MQCHAR8 Нет Строка со значением Null или пробел
    ApplOriginData MQCHAR4 Нет Строка со значением Null или пробел
    GroupId MQBYTE24 MQGI_NONE Nulls
    MsgSeqNumber MQLONG Нет 1
    Offset MQLONG Нет 0
    MsgFlags MQLONG MQMF_NONE 0
    OriginalLength MQLONG MQOL_UNDEFINED -1

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

    GetMsgOpts – опции для функции MQGET - MQGMO (Get-message options), поля структуры которой приведены в таблице 8.4. Наиболее часто используемые опции для управления MQGET :

    • MQGMO_WAIT - определяет время ожидания функцией поступления новых сообщений в зависимости от значения в WaitInterval, заданногов мсек. MQGMO_NO_WAIT немедленно возвращает управление, если нет больше сообщений в очереди.
    • MQGMO_BROWSE_FIRST - определяет, что читается первое сообщение в очереди.
    • MQGMO_BROWSE_NEXT - определяет, что читается сообщение из текущей позиции.
    • MQGMO_BROWSE_MSG_UNDER_CURSOR - определяет, что читается сообщение под курсором.
    • MQGMO_LOGICAL_ORDER - определяет, что сообщения читаются в логическом порядке. Если опция опущена, то сообщения читаются в физическом порядке.
    • MQGMO_FAIL_IF_QUIESCING - выдает ошибку, если менеджер не доступен.
    • MQGMO_SYNCPOINT ( MQGMO_NO_SYNCPOINT ) - означает установку (отмену установки) контрольной точки (syncpoint control) на данном сообщении.
    • MQGMO_ACCEPT_TRUNCATED_MSG - указывает, что допускается отсечение данных сообщения, например, если DataLength для реального сообщения больше BufferLength.

    Все опции MQGMO даны в главе "MQGET – Get message" [ 14 ] .

    BufferLength – длина в байтах области буфера Buffer, в который считывается сообщение (переменная типа MQLONG ). Максимальная длина сообщений 100Мбт, длина по умолчанию 4Мбт, реальная длина большинства сообщений не более 10Кбт.

    Buffer - буфер, в который считывается сообщение.

    DataLength – длина сообщения в байтах (переменная MQLONG ).

    Если DataLength для реального сообщения больше BufferLength, то часть сообщения может быть потеряна в зависимости от опции MQGMO_ACCEPT_TRUNCATED_MSG.

    CompCode, Reason – это стандартные возвращаемые параметры, упомянутые выше и не требующие детальных пояснений.

    Таблица 8.4. Поля структуры MQGMO
    Имя поля MQGMO Тип поля Описание поля Имя константы Значение по умолчанию
    StrucId MQCHAR4 Идентификатор структуры MQGMO_STRUC_ID 'GMOb'
    Version MQLONG Номер версии структуры MQGMO_VERSION_1 1
    Options MQLONG Опции для управления MQGET MQGMO_NO_WAIT 0
    WaitInterval MQLONG Интервал ожидания (Wait interval) WaitInterval None 0
    Signal1 MQLONG Сигнал Нет Указатель Null на z/OS; 0 в ост. случаях
    Signal2 MQLONG Идентификатор сигнала Нет 0
    ResolvedQName MQCHAR48 Разрешенное имя очереди назначения (destination queue) Нет Строка string или пробел
    MatchOptions MQLONG Опции управления критериями выбора, используемыми MQGET MQMO_MATCH_MSG_ID + MQMO_MATCH_CORREL_ID 3
    GroupStatus MQCHAR Флаг, индицирующий, что извлеченное сообщение находится в группе сообщений MQGS_NOT_IN_GROUP 'b'
    SegmentStatus MQCHAR Флаг, индицирующий, что извлеченное сообщение является сегментом логического сообщения MQSS_NOT_A_SEGMENT 'b'
    Segmentation MQCHAR Флаг, индицирующий, что допускается дальнейшая сегментация для извлеченного сообщения MQSEG_INHIBITED 'b'
    Reserved1 MQCHAR Резервное Нет 'b'
    MsgToken MQBYTE16 Маркер сообщения (Message token) MQMTOK_NONE Nulls
    ReturnedLength MQLONG Возвращаемая длина сообщения в байтах MQRL_UNDEFINED -1