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

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

Аннотация: В лекции излагаются основы программирования приложений, работающих с WebSphere MQ. Описывается синтаксис функций интерфейса очередей сообщений MQI (Message Queue Interface) и основные опции для работы с объектами. К данной лекции можно будет периодически возвращаться как к справочному руководству по функциям WebSphere MQ при разработке приложений. Синтаксис функций является универсальным для любых языков программирования. Приводится аргументация того факта, что в данной книге примеры программ даются на языке С.

Общие сведения о разработке приложений для WebSphere MQ

В большинстве приложений, работающих с WebSphere MQ, решаются такие задачи как: чтение сообщений из базы данных (БД) и запись их в очередь; чтение сообщений из очереди и запись их в БД; и то и другое одновременно. В более редких случаях, например, для задач мониторинга осуществляется чтение параметров объектов WebSphere MQ в частности Current Depth, Channel Status, Message Count, Last Message Date/Time и т.п.

Для задач чтения/записи сообщений в очередь ведется работа непосредственно с сообщениями. На рис.8.1 показана структура одного из таких сообщений.

Структура сообщения

Рис. 8.1. Структура сообщения

Заголовок сообщения (Message Header) несет в себе служебную информацию: идентификационный номер сообщения (Message ID); идентификатор пользователя, пославшего сообщение; формат, длину, кодировку, тип сообщения, дату и время отправки и т.д. Данные в сообщении (Message Data) на уровне приложений разделяются на поля. В спецификации приложений записывается структура сообщения, например, в табл.8.1.

Таблица 8.1.
Имя поля Длина (байты) Примечание
Name 50 Для заполнения поля Account_Name таблицы Account
Account 32 Для заполнения поля Account таблицы Account
ClientNo 32 Для заполнения поля ClientNo таблицы Account
Detail 4 Для заполнения поля Detail таблицы Account
Account_Date 10 Дата в формате 'YYYY-MM-DD' для заполнения поля Account_Date таблицы Account
Account_Time 8 Время в формате 'HH-MM-SS' для заполнения поля Account_Time таблицы Account
Comment 150 Для заполнения поля Comment таблицы Account

В теле сообщения поля не имеют имен и идут в порядке перечисления в таблице 8.1. без разделителей (разделители могут быть использованы, но тогда длина сообщения увеличится). Числа ( Integer, Long ) записываются в символьном формате.

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

Основу для программирования приложений, работающих с WebSphere MQ, предоставляет интерфейс очередей сообщений MQI (Message Queue Interface).

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

  • MQCONN , MQCONNХ и MQDISC . Эти функции обеспечивают подключение приложения к менеджеру очередей и отключение его.
  • MQOPEN и MQCLOSE функции открывают и закрывают подключение к очередям, с которыми работает приложение.
  • MQPUT и MQPUT1 функции обеспечивают помещение сообщений в очередь.
  • MQGET функция поддерживает просмотр, извлечение и удаление сообщений из очереди.
  • MQINQ функция позволяет запросить атрибуты WebSphere MQ объекта.
  • MQSET функция устанавливает атрибуты очереди, но атрибуты других типов WebSphere MQ объектов не могут быть изменены.
  • MQBEGIN , MQCMIT , MQBACK . Эти функции обеспечивают работу с WebSphere MQ транзакциями (открытие транзакции, закрытие и "откат" транзакции).

Таким образом, обобщенная структура программы для работы с WebSphere MQ на уровне блоков может быть представлена в виде следующей последовательности псевдокода:

Блок 1 MQCONN
Блок 2 MQOPEN
Блок 3 MQBEGIN
Блок 4 MQGET
Блок 5 SQL UPDATE, SQL SELECT
Блок 6 MQPUT
Блок 7 Если нет ошибок - MQCMIT , в противном случае MQBACK
Блок 8 MQCLOSE
Блок 9 MQDISC

Разработка приложений на основе WebSphere MQ может осуществляться на платформах: UNIX (AIX, HP_UX, Linux, Solaris), Windows, OS/390, OS400, OS/2 Warp и др. Полный список поддерживаемых платформ можно найти на сайте ИБМ: http://www.ibm.com/software/ts/mqseries/library/#announce

Для программирования приложений, работающих с WebSphere MQ, предлагается инструментарий на различных языках: C (для всех платформ), C++ (для большинства операционных систем), Visual Basic (для систем Windows), COBOL, Assembler (для мэйн-фреймов ИБМ с операционной системой z/OS), RPG, PL/I (для систем с z/OS, OS/2 Warp, VSE/ESA, Windows), TAL (для систем с Compaq NonStop Kernel) и другие средства.

В WebSphere MQ для приложений на C++ в среде Windows следует редактировать (линковать) разрабатываемую программу с библиотекой MQI в дополнение к библиотекам операционной системы:

  • mqm.Lib для WebSphere MQ Server для 32-bit C
  • mqic.Lib для WebSphere MQ Client для 16-bit C
  • mqic32.Lib для WebSphere MQ Client для 32-bit C

В качестве заголовочных файлов следует использовать cmqc.h или cmqcfc.h

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

Следует упомянуть об интерфейсе приложений для передачи сообщений AMI (Application Messaging Interface), который является более простым и высокоуровневым интерфейсом, чем MQI. И хотя AMI имеет некоторые ограничения по сравнению с MQI, его функции достаточно эффективны для большинства пользователей. AMI поддерживает два типа моделей для программирования приложений: точка-точка, издатель-подписчик. Интерфейс AMI существует для языков C, C++ и Java, работающих в операционных системах: OS/400, AIX, HP-UX, Solaris, Microsoft Windows и z/OS.

В дальнейшем при описании функций интерфейса MQI будут использованы общие для всех функций два типа параметров: идентификатор (handle) и код возврата (return сode). При подключении к менеджеру очередей должен быть создан уникальный идентификатор этого менеджера для данного приложения, который называется идентификатором связи   Hconn (connection handle). Идентификатор Hconn возвращается функциями MQCONN или MQCONNХ и передается во все другие функции как входной параметр. При работе с объектом WebSphere MQ должен также существовать уникальный идентификатор, называемый идентификатором объекта (object Handle). Этот идентификатор определяется функций MQOPEN при открытии объекта и возвращается как Hobj. Программа передает идентификатор объекта как входной параметр при вызове функций MQPUT , MQGET , MQINQ , MQSET или MQCLOSE .

Код завершения (completion code) и код ошибки (reason code) возвращаются как выходные параметры в каждой функции. Совместно они называются кодами возврата (return codes) и показывают результат выполнения функции. Код завершения возвращается либо как MQCC_OK или MQCC_FAILED, отображая успешное или ошибочное выполнение функции, соответственно. Иногда возвращается промежуточное значение MQCC_WARNING как предупреждение о неполном завершении. MQCC_OK всегда соответствует Reason code = 0. MQCC_WARNING может сопутствовать, например, Reason code = 2002, это говорит о том, что приложение уже подключено. MQCC_FAILED обязательно имеет детализацию, например: Reason code = 2058 - менеджер с данным именем неизвестен или недоступен, Reason code = 2035 - нет прав доступа и т.д. Программа может и должна использовать код ошибки в процессе обработки. Например, при определенном коде ошибки программа может выдать сообщение пользователю с предложением изменить входные данные и после этого повторить вызов функции либо вернуть сообщение пользователю. Коды возврата подробно описаны в книге WebSphere MQ Messages [ 7 ] .