В большинстве приложений, работающих с
Для задач чтения/записи сообщений в очередь ведется работа непосредственно с сообщениями. На рис.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 ) записываются в символьном формате.
По MSGTYPE, определяющее тип сообщения. Каждому типу сообщения соответствует своя структура данных сообщения (Message Data). По типу сообщения программа определяет, по какой ветви программы осуществлять разбор сообщения. С одной стороны, нецелесообразно увеличивать число интерфейсов и, соответственно, число
Основу для
Приложения для работы с
MQCONN , MQCONNХ и MQDISC . Эти функции обеспечивают подключение приложения к менеджеру очередей и отключение его. MQOPEN и MQCLOSE функции открывают и закрывают подключение к очередям, с которыми работает приложение. MQPUT и MQPUT1 функции обеспечивают помещение сообщений в очередь. MQGET функция поддерживает просмотр, извлечение и удаление сообщений из очереди. MQINQ функция позволяет запросить атрибуты MQSET функция устанавливает MQBEGIN , MQCMIT , MQBACK . Эти функции обеспечивают работу с Таким образом, обобщенная структура программы для работы с
Блок 1 |
Блок 2 |
Блок 3 |
Блок 4 |
Блок 5 SQL UPDATE, SQL SELECT |
Блок 6 |
Блок 7 Если нет ошибок - , в противном случае |
Блок 8 |
Блок 9 |
Разработка приложений на основе
Для
В
В качестве заголовочных файлов следует использовать cmqc.h или cmqcfc.h
Библиотека
Следует упомянуть об интерфейсе приложений для передачи сообщений
В дальнейшем при описании функций интерфейса Hconn (connection handle)Hconn возвращается функциями или и передается во все другие функции как входной параметр. При работе с объектом при открытии объекта и возвращается как Hobj. Программа передает идентификатор объекта как входной параметр при вызове функций , , , или .
MQCONN - функция подключения приложения к менеджеру очередейСинтаксис:
MQCONN (QmgrName, Hconn, CompCode, Reason)
где:
QmgrNam |
- | имя менеджера очередей, к которому производиться подключение (латинские буквы, цифры, символы "_", "/", ".", "%" ). |
Hconn |
- | |
CompCode |
- | MQCC_OK, MQCC_WARNING, MQCC_FAILED |
Reason |
- |
Результат работы функции – установление связи с менеджером очередей и возвращение уникального Hconn с менеджером. Имя QmgrNam может быть опущено (строка со значением Null или пробел), тогда обращение к менеджеру очередей на данном компьютере происходит по умолчанию. Одно из основных назначений функции – проверка авторизации пользователя (приложение работает под определенным пользователем с идентификатором userid, который может быть не авторизован для работы с данным менеджером или его объектами).
MQOPEN – функция, открывающая подключение к очередям, с которыми работает приложениеСинтаксис:
MQOPEN (Hconn, ObjDesc, Options, Hobj,
CompCode, Reason)
где:
Hconn |
- | |
ObjDesc |
- | описание объекта MQOD |
Options |
- | опции объекта MQOO |
Hobj |
- | |
CompCode |
- | MQCC_OK – успешное завершение, MQCC_WARNING – предупреждение, MQCC_FAILED – ошибочный вызов |
Reason |
- |
Результат работы функции – возвращение уникального Hobj с "открытым" объектом MQOD – это ссылка на структуру объекта из библиотеки MQOD представлена в таблице 8.2.
Опции объекта (переменная MQLONG ): MQOO_BROWSE* – просмотр объекта, MQOO_INPUT* – объект открыт для помещения сообщений, MQOO_OUTPUT – объект открыт для извлечения сообщений, MQOO_INQUIRE - объект открыт для извлечения атрибутов, MQOO_SET - объект открыт для изменения атрибутов и др. Опции объекта со звездочками задаются, как правило, в виде развернутых констант:
MQOO_INPUT_AS_Q_DEF - MQOO_INPUT_SHARED - MQOO_INPUT_EXCLUSIVE - MQOO_BROWSE - MQGMO_BROWSE_FIRST, MQGMO_BROWSE_NEXT, MQGMO_BROWSE_MSG_UNDER_CURSOR функции MQGET ;MQOO_OUTPUT - Описание всех опций и объекта . Как правило, значений опций по умолчанию для вполне достаточно для программирования стандартных приложений для
Имя поля MQOD |
Тип поля | Имя константы | Значение по умолчанию |
|---|---|---|---|
StrucId |
MQCHAR4 |
MQOD_STRUC_ID |
'ODbb' |
Version |
MQLONG |
MQOD_VERSION_1 |
1 |
ObjectType |
MQLONG |
MQOT_Q |
1 |
ObjectName |
MQCHAR48 |
Нет | Строка со значением Null или пробел |
ObjectQMgrName |
MQCHAR48 |
Нет | Строка со значением Null или пробел |
DynamicQName |
MQCHAR48 |
Нет | 'CSQ.*' на z/OS; 'AMQ.*' в противном случае |
AlternateUserId |
MQCHAR12 |
Нет | Строка со значением Null или пробел |
RecsPresent |
MQLONG |
Нет | 0 |
KnownDestCount |
MQLONG |
Нет | 0 |
UnknownDestCount |
MQLONG |
Нет | 0 |
InvalidDestCount |
MQLONG |
Нет | 0 |
ObjectRecOffset |
MQLONG |
Нет | 0 |
ResponseRecOffset |
MQLONG |
Нет | 0 |
ObjectRecPtr None |
MQPTR |
Нет | Указатель со значением Null |
ResponseRecPtr |
MQPTR |
Нет | Указатель со значением Null |
AlternateSecurityId |
MQBYTE40 |
MQSID_NONE |
Nulls |
ResolvedQName |
MQCHAR48 |
Нет | Строка со значением Null или пробел |
ResolvedQMgrName |
MQCHAR48 |
Нет | Строка со значением Null или пробел |
MQGET - функция для просмотра, извлечения и удаления сообщений из очередиСинтаксис:
MQGET (Hconn, Hobj, MsgDesc, GetMsgOpts,
BufferLength,Buffer, DataLength,
CompCode, Reason)
где:
Hconn |
- | |
Hobj |
- | идентификатор объекта, полученный от |
MsgDesc |
- | описание сообщения MQMD |
GetMsgOpts |
- | опции объекта MQGMO для чтения сообщений |
BufferLength |
- | длина буфера Buffer, в который считывается сообщение |
Buffer |
- | буфер, в который считывается сообщение |
DataLength |
- | длина сообщения |
CompCode |
- | MQCC_OK, MQCC_WARNING, MQCC_FAILED |
Reason |
- |
Hconn и Hobj – это идентификаторы, полученные от и , соответственно.
Описание сообщения 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 |
|
MQBYTE24 |
MQMI_NONE |
Nulls |
|
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 или пробел |
|
MQBYTE24 |
MQGI_NONE |
Nulls |
MsgSeqNumber |
MQLONG |
Нет | 1 |
Offset |
MQLONG |
Нет | 0 |
MsgFlags |
MQLONG |
MQMF_NONE |
0 |
OriginalLength |
MQLONG |
MQOL_UNDEFINED |
-1 |
Как видно из табл.8.3 из имени поля MQMD можно извлечь всевозможные атрибуты заголовка сообщений.
GetMsgOpts – опции для функции - MQGMO (Get-message options), поля структуры которой приведены в таблице 8.4. Наиболее часто используемые опции для управления :
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.Все опции .
BufferLength – длина в байтах области буфера Buffer, в который считывается сообщение (переменная типа MQLONG ). Максимальная длина сообщений 100Мбт, длина по умолчанию 4Мбт, реальная длина большинства сообщений не более 10Кбт.
Buffer - буфер, в который считывается сообщение.
DataLength – длина сообщения в байтах (переменная MQLONG ).
Если DataLength для реального сообщения больше BufferLength, то часть сообщения может быть потеряна в зависимости от опции MQGMO_ACCEPT_TRUNCATED_MSG.
CompCode, Reason – это стандартные возвращаемые параметры, упомянутые выше и не требующие детальных пояснений.
Имя поля MQGMO |
Тип поля | Описание поля | Имя константы | Значение по умолчанию |
|---|---|---|---|---|
StrucId |
MQCHAR4 |
Идентификатор структуры | MQGMO_STRUC_ID |
'GMOb' |
Version |
MQLONG |
Номер версии структуры | MQGMO_VERSION_1 |
1 |
Options |
MQLONG |
Опции для управления |
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 |
Опции управления критериями выбора, используемыми |
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 |
MQPUT – функция для записи сообщений в очередьСинтаксис:
MQPUT (Hconn, Hobj, MsgDesc, PutMsgOpts,
BufferLength, Buffer, CompCode, Reason)
где:
Hconn |
- | |
Hobj |
- | идентификатор объекта, полученный от |
MsgDesc |
- | описание сообщения MQMD |
PutMsgOpts |
- | опции MQPMO для записи сообщений |
BufferLength |
- | длина буфера Buffer, откуда пишется сообщение. Значение 0 является действительным и показывает, что сообщение не содержит данных. |
Buffer |
- | буфер, из которого пишется сообщение |
CompCode |
- | MQCC_OK, MQCC_WARNING, MQCC_FAILED |
Reason |
- |
Параметры Hconn, Hobj, MsgDesc, BufferLength, Buffer, CompCode, Reason – такие же, как и в функции . Исключение составляет PutMsgOpts – опция MQPMO (Put-message options), служащая для того, чтобы положить сообщение в очередь. Поля структуры MQPMO приведены в таблице 8.5.
Имя поля MQPMO |
Тип поля | Описание поля | Имя константы | Значение по умолчанию |
|---|---|---|---|---|
StrucId |
MQCHAR4 |
Идентификатор структуры | MQPMO_STRUC_ID |
'PMOb' |
Version |
MQLONG |
Номер версии структуры | MQPMO_VERSION_1 |
1 |
Options |
MQLONG |
Опции для управления и |
MQPMO_NONE |
0 |
Timeout |
MQLONG |
Зарезервировано | Нет | -1 |
Context |
MQHOBJ |
Идентификатор объекта входной очереди | Нет | 0 |
KnownDestCount |
MQLONG |
Число сообщений, посланное успешно в локальную очередь | Нет | 0 |
UnknownDestCount |
MQLONG |
Число сообщений, посланное успешно в удаленную очередь | Нет | 0 |
InvalidDestCount |
MQLONG |
Число сообщений, которые возможно не посланы | Нет | 0 |
ResolvedQName |
MQCHAR48 |
Разрешенное имя очереди назначения | Нет | Строка Null или пробел |
ResolvedQMgrName |
MQCHAR48 |
Разрешенное имя менеджера назначения | Нет | Строка Null или пробел |
RecsPresent |
MQLONG |
Число записей помещенных сообщений или ответных записей в настоящее время | Нет | 0 |
PutMsgRecFields |
MQLONG |
Флаг, индицирующий, что MQPMR поле присутствует |
MQPMRF_NONE |
0 |
PutMsgRecOffset |
MQLONG |
Погашение записи первого помещенного сообщения с момента старта MQPMO |
Нет | 0 |
ResponseRecOffset |
MQLONG |
Погашение записи первого ответа с момента старта MQPMO |
Нет | 0 |
PutMsgRecPtr |
MQPTR |
Адрес записи первого помещенного в очередь сообщения | Нет | Указатель Null |
ResponseRecPtr |
MQPTR |
Адрес записи первого ответа | Нет | Указатель Null |
Среди опций для управления следует назвать:
MQPMO_NEW_MSG_ID - генерирует новый идентификатор сообщенияMQPMO_NEW_CORREL_ID - генерирует новый корреляционный идентификатор и заменяет поле CorrelId в опции MQMD этим идентификатором.MQPMO_LOGICAL_ORDER - определяет, что сообщения в группах и сегментах пишутся в логическом порядке.MQPMO_FAIL_IF_QUIESCING - выдает ошибку, если менеджер не доступен.MQPMO_SYNCPOINT ( MQPMO_NO_SYNCPOINT ) - означает установку (отмену установки) контрольной точки (syncpoint control) на данном сообщении.MQ_MSG_HEADER_LENGTH - определяется для очереди передачи (Полный список опций .
Функция может положить сообщение как в локальную ( считывает сообщения только из локальной очереди локального менеджера очередей, но не может читать сообщения на удаленном менеджере.
MQCLOSE – функция, закрывающая подключение к очереди, с которой работает приложение.Синтаксис:
MQCLOSE (Hconn, Hobj, Options,
CompCode, Reason)
где:
Hconn |
- | |
Hobj |
- | |
ObjDesc |
- | описание объекта MQOD |
Options |
- | опции объекта |
CompCode |
- | |
Reason |
- |
MQDISC - функция для отключения приложения от менеджера очередейСинтаксис:
MQDISC (Hconn, CompCode, Reason)
где:
Hconn |
- | |
CompCode |
- | |
Reason |
- |
Для работы приложений в условиях промышленной эксплуатации необходимо использовать дополнительные функции
Одним из важнейших приемов прикладного программирования для , , можно открыть транзакцию, завершить транзакцию успешно и откатить транзакцию, соответственно. В этом механизме прослеживается полная аналогия с транзакциями в базах данных. Программирование с использованием
MQBEGIN - функция, которая открывает Синтаксис:
MQBEGIN (Hconn, BeginOptions,
CompCode, Reason)
где:
Hconn |
- | |
BeginOptions |
- | опции |
CompCode |
- | |
Reason |
- |
Здесь BeginOptions дает ссылку на структуру MQBO (Begin options), поля которой показаны в таблице 8.6
Имя поля MQBO |
Тип поля | Имя поля | Имя константы | Значение константы |
|---|---|---|---|---|
StrucId |
MQCHAR4 |
Идентификатор структуры | MQBO_STRUC_ID |
'BObb' |
Version |
MQLONG |
Номер версии структуры | MQBO_VERSION_1 |
1 |
Options |
MQLONG |
Опции для управления MQBO |
MQBO_NONE |
0 |
На языке С макропеременная MQBO_DEFAULT содержит значения, приведенные в табл.8.6, и может быть использована в тексте следующим образом: MQBO MyBO = {MQBO_DEFAULT};
MQCMIT – функция, которая указывает на то, что все сообщения, прочитанные и записанные с момента открытия транзакции, становятся постоянными, то есть транзакция успешно завершена. Сообщения, помещенные в очередь как часть блока сообщений, становятся доступными всем приложениям. Сообщения, прочитанные из очереди как часть блока сообщений, удаляются из очередиСинтаксис:
MQCMIT (Hconn, CompCode, Reason)
Комментарии в данном случае излишни.
MQBACK - функция, которая указывает на то, что всем сообщениям, прочитанным и записанным с момента открытия транзакции, дается задний ход, то есть производится откат транзакции. Все сообщения, помещенные в очередь, удаляются из нее. Все сообщения, прочитанные из очереди, восстанавливаются в очереди (становятся доступными) MQBEGIN .Синтаксис:
MQBACK (Hconn, CompCode, Reason)
Работа функций , и будет на примере продемонстрирована в лекции 9.
Следующие группы функций позволяют считывать и модифицировать атрибуты
MQINQ – функция, которая возвращает массив цифр и множество символьных строк, содержащих параметры объекта. В качестве объектов могут выступать очередь, процесс, именованный список (namelist), менеджер очередейСинтаксис:
MQINQ (Hconn, Hobj, SelectorCount, Selectors,
IntAttrCount, IntAttrs,
CharAttrLength, CharAttrs,
CompCode, Reason)
где:
Hconn |
- | |
Hobj |
- | идентификатор объекта, полученный от |
SelectorCount |
- | Счетчик атрибутов, которые должны быть извлечены (от 0 до 256) |
Selectors |
- | Массив значений атрибутов, т.е. чисел или символов, которые должны быть извлечены |
IntAttrCount |
- | Счетчик цифровых атрибутов |
IntAttrs |
- | Массив цифровых атрибутов |
CharAttrLength |
- | Длина буфера символьных атрибутов |
CharAttrs |
- | Буфер значений символьных атрибутов |
CompCode |
- | |
Reason |
- |
Комментарии. Буфер . Работа функций и будет продемонстрирована позже на примере.
MQSET – функция, изменяющая атрибуты объекта, представленного своим идентификатором. Объектом может быть только очередьСинтаксис (аналогичен ):
MQSET (Hconn, Hobj, SelectorCount, Selectors,
IntAttrCount, IntAttrs,
CharAttrLength, CharAttrs,
CompCode, Reason)
где:
Hconn |
- | |
Hobj |
- | идентификатор объекта, полученный от |
SelectorCount |
- | Счетчик атрибутов, которые должны быть установлены (от 0 до 256) |
Selectors |
- | Массив значений атрибутов, т.е. чисел или символов, которые должны быть установлены |
IntAttrCount |
- | Счетчик цифровых атрибутов |
IntAttrs |
- | Массив цифровых атрибутов |
CharAttrLength |
- | Длина буфера символьных атрибутов |
CharAttrs |
- | Буфер значений символьных атрибутов |
CompCode |
- | |
Reason |
- |
Комментарии. Буфер .
MQCONNХ – функция, которая обеспечивает подключение приложения к менеджеру очередейСинтаксис:
MQCONNХ (QMgrName, ConnectOpts, Hconn,
CompCode, Reason)
Функция отличается от наличием параметра ConnectOpts для контроля процесса подключения к менеджеру очередей и позволяет установить дополнительные опции. Опции MQCNO_STANDARD_BINDING и MQCNO_FASTPATH_BINDING служат для стандартного или быстрого установления связи. Опции MQCNO_HANDLE_SHARE_NONE, MQCNO_HANDLE_SHARE_BLOCK, MQCNO_HANDLE_SHARE_NO_BLOCK позволяют осуществлять управление
Опции .
MQPUT1 – функция, которая помещает одно сообщение в очередь, при этом очередь не должна быть открыта MQPUT1 по сравнению с MQPUT не требует команды MQOPEN и MQCLOSE .Синтаксис:
MQPUT1 (Hconn, ObjDesc, MsgDesc, PutMsgOpts,
BufferLength, Buffer, CompCode,
Reason)
Как следствие такого определения функции вместо параметра Hobj для в используется параметр ObjDesc, как и в функции .
На этом обзор основных и дополнительных функций
В заключении следует отметить, что разработчикам приложений необходимо выбирать язык программирования исходя из решаемой задачи и требований на создаваемое ПО. Если приложение должно работать с
В большинстве приложений, работающих с
Для задач чтения/записи сообщений в очередь ведется работа непосредственно с сообщениями. На рис.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 ) записываются в символьном формате.
По MSGTYPE, определяющее тип сообщения. Каждому типу сообщения соответствует своя структура данных сообщения (Message Data). По типу сообщения программа определяет, по какой ветви программы осуществлять разбор сообщения. С одной стороны, нецелесообразно увеличивать число интерфейсов и, соответственно, число
Основу для
Приложения для работы с
MQCONN , MQCONNХ и MQDISC . Эти функции обеспечивают подключение приложения к менеджеру очередей и отключение его. MQOPEN и MQCLOSE функции открывают и закрывают подключение к очередям, с которыми работает приложение. MQPUT и MQPUT1 функции обеспечивают помещение сообщений в очередь. MQGET функция поддерживает просмотр, извлечение и удаление сообщений из очереди. MQINQ функция позволяет запросить атрибуты MQSET функция устанавливает MQBEGIN , MQCMIT , MQBACK . Эти функции обеспечивают работу с Таким образом, обобщенная структура программы для работы с
Блок 1 |
Блок 2 |
Блок 3 |
Блок 4 |
Блок 5 SQL UPDATE, SQL SELECT |
Блок 6 |
Блок 7 Если нет ошибок - , в противном случае |
Блок 8 |
Блок 9 |
Разработка приложений на основе
Для
В
В качестве заголовочных файлов следует использовать cmqc.h или cmqcfc.h
Библиотека
Следует упомянуть об интерфейсе приложений для передачи сообщений
В дальнейшем при описании функций интерфейса Hconn (connection handle)Hconn возвращается функциями или и передается во все другие функции как входной параметр. При работе с объектом при открытии объекта и возвращается как Hobj. Программа передает идентификатор объекта как входной параметр при вызове функций , , , или .
MQCONN - функция подключения приложения к менеджеру очередейСинтаксис:
MQCONN (QmgrName, Hconn, CompCode, Reason)
где:
QmgrNam |
- | имя менеджера очередей, к которому производиться подключение (латинские буквы, цифры, символы "_", "/", ".", "%" ). |
Hconn |
- | |
CompCode |
- | MQCC_OK, MQCC_WARNING, MQCC_FAILED |
Reason |
- |
Результат работы функции – установление связи с менеджером очередей и возвращение уникального Hconn с менеджером. Имя QmgrNam может быть опущено (строка со значением Null или пробел), тогда обращение к менеджеру очередей на данном компьютере происходит по умолчанию. Одно из основных назначений функции – проверка авторизации пользователя (приложение работает под определенным пользователем с идентификатором userid, который может быть не авторизован для работы с данным менеджером или его объектами).
MQOPEN – функция, открывающая подключение к очередям, с которыми работает приложениеСинтаксис:
MQOPEN (Hconn, ObjDesc, Options, Hobj,
CompCode, Reason)
где:
Hconn |
- | |
ObjDesc |
- | описание объекта MQOD |
Options |
- | опции объекта MQOO |
Hobj |
- | |
CompCode |
- | MQCC_OK – успешное завершение, MQCC_WARNING – предупреждение, MQCC_FAILED – ошибочный вызов |
Reason |
- |
Результат работы функции – возвращение уникального Hobj с "открытым" объектом MQOD – это ссылка на структуру объекта из библиотеки MQOD представлена в таблице 8.2.
Опции объекта (переменная MQLONG ): MQOO_BROWSE* – просмотр объекта, MQOO_INPUT* – объект открыт для помещения сообщений, MQOO_OUTPUT – объект открыт для извлечения сообщений, MQOO_INQUIRE - объект открыт для извлечения атрибутов, MQOO_SET - объект открыт для изменения атрибутов и др. Опции объекта со звездочками задаются, как правило, в виде развернутых констант:
MQOO_INPUT_AS_Q_DEF - MQOO_INPUT_SHARED - MQOO_INPUT_EXCLUSIVE - MQOO_BROWSE - MQGMO_BROWSE_FIRST, MQGMO_BROWSE_NEXT, MQGMO_BROWSE_MSG_UNDER_CURSOR функции MQGET ;MQOO_OUTPUT - Описание всех опций и объекта . Как правило, значений опций по умолчанию для вполне достаточно для программирования стандартных приложений для
Имя поля MQOD |
Тип поля | Имя константы | Значение по умолчанию |
|---|---|---|---|
StrucId |
MQCHAR4 |
MQOD_STRUC_ID |
'ODbb' |
Version |
MQLONG |
MQOD_VERSION_1 |
1 |
ObjectType |
MQLONG |
MQOT_Q |
1 |
ObjectName |
MQCHAR48 |
Нет | Строка со значением Null или пробел |
ObjectQMgrName |
MQCHAR48 |
Нет | Строка со значением Null или пробел |
DynamicQName |
MQCHAR48 |
Нет | 'CSQ.*' на z/OS; 'AMQ.*' в противном случае |
AlternateUserId |
MQCHAR12 |
Нет | Строка со значением Null или пробел |
RecsPresent |
MQLONG |
Нет | 0 |
KnownDestCount |
MQLONG |
Нет | 0 |
UnknownDestCount |
MQLONG |
Нет | 0 |
InvalidDestCount |
MQLONG |
Нет | 0 |
ObjectRecOffset |
MQLONG |
Нет | 0 |
ResponseRecOffset |
MQLONG |
Нет | 0 |
ObjectRecPtr None |
MQPTR |
Нет | Указатель со значением Null |
ResponseRecPtr |
MQPTR |
Нет | Указатель со значением Null |
AlternateSecurityId |
MQBYTE40 |
MQSID_NONE |
Nulls |
ResolvedQName |
MQCHAR48 |
Нет | Строка со значением Null или пробел |
ResolvedQMgrName |
MQCHAR48 |
Нет | Строка со значением Null или пробел |
MQGET - функция для просмотра, извлечения и удаления сообщений из очередиСинтаксис:
MQGET (Hconn, Hobj, MsgDesc, GetMsgOpts,
BufferLength,Buffer, DataLength,
CompCode, Reason)
где:
Hconn |
- | |
Hobj |
- | идентификатор объекта, полученный от |
MsgDesc |
- | описание сообщения MQMD |
GetMsgOpts |
- | опции объекта MQGMO для чтения сообщений |
BufferLength |
- | длина буфера Buffer, в который считывается сообщение |
Buffer |
- | буфер, в который считывается сообщение |
DataLength |
- | длина сообщения |
CompCode |
- | MQCC_OK, MQCC_WARNING, MQCC_FAILED |
Reason |
- |
Hconn и Hobj – это идентификаторы, полученные от и , соответственно.
Описание сообщения 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 |
|
MQBYTE24 |
MQMI_NONE |
Nulls |
|
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 или пробел |
|
MQBYTE24 |
MQGI_NONE |
Nulls |
MsgSeqNumber |
MQLONG |
Нет | 1 |
Offset |
MQLONG |
Нет | 0 |
MsgFlags |
MQLONG |
MQMF_NONE |
0 |
OriginalLength |
MQLONG |
MQOL_UNDEFINED |
-1 |
Как видно из табл.8.3 из имени поля MQMD можно извлечь всевозможные атрибуты заголовка сообщений.
GetMsgOpts – опции для функции - MQGMO (Get-message options), поля структуры которой приведены в таблице 8.4. Наиболее часто используемые опции для управления :
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.Все опции .
BufferLength – длина в байтах области буфера Buffer, в который считывается сообщение (переменная типа MQLONG ). Максимальная длина сообщений 100Мбт, длина по умолчанию 4Мбт, реальная длина большинства сообщений не более 10Кбт.
Buffer - буфер, в который считывается сообщение.
DataLength – длина сообщения в байтах (переменная MQLONG ).
Если DataLength для реального сообщения больше BufferLength, то часть сообщения может быть потеряна в зависимости от опции MQGMO_ACCEPT_TRUNCATED_MSG.
CompCode, Reason – это стандартные возвращаемые параметры, упомянутые выше и не требующие детальных пояснений.
Имя поля MQGMO |
Тип поля | Описание поля | Имя константы | Значение по умолчанию |
|---|---|---|---|---|
StrucId |
MQCHAR4 |
Идентификатор структуры | MQGMO_STRUC_ID |
'GMOb' |
Version |
MQLONG |
Номер версии структуры | MQGMO_VERSION_1 |
1 |
Options |
MQLONG |
Опции для управления |
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 |
Опции управления критериями выбора, используемыми |
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 |
MQPUT – функция для записи сообщений в очередьСинтаксис:
MQPUT (Hconn, Hobj, MsgDesc, PutMsgOpts,
BufferLength, Buffer, CompCode, Reason)
где:
Hconn |
- | |
Hobj |
- | идентификатор объекта, полученный от |
MsgDesc |
- | описание сообщения MQMD |
PutMsgOpts |
- | опции MQPMO для записи сообщений |
BufferLength |
- | длина буфера Buffer, откуда пишется сообщение. Значение 0 является действительным и показывает, что сообщение не содержит данных. |
Buffer |
- | буфер, из которого пишется сообщение |
CompCode |
- | MQCC_OK, MQCC_WARNING, MQCC_FAILED |
Reason |
- |
Параметры Hconn, Hobj, MsgDesc, BufferLength, Buffer, CompCode, Reason – такие же, как и в функции . Исключение составляет PutMsgOpts – опция MQPMO (Put-message options), служащая для того, чтобы положить сообщение в очередь. Поля структуры MQPMO приведены в таблице 8.5.
Имя поля MQPMO |
Тип поля | Описание поля | Имя константы | Значение по умолчанию |
|---|---|---|---|---|
StrucId |
MQCHAR4 |
Идентификатор структуры | MQPMO_STRUC_ID |
'PMOb' |
Version |
MQLONG |
Номер версии структуры | MQPMO_VERSION_1 |
1 |
Options |
MQLONG |
Опции для управления и |
MQPMO_NONE |
0 |
Timeout |
MQLONG |
Зарезервировано | Нет | -1 |
Context |
MQHOBJ |
Идентификатор объекта входной очереди | Нет | 0 |
KnownDestCount |
MQLONG |
Число сообщений, посланное успешно в локальную очередь | Нет | 0 |
UnknownDestCount |
MQLONG |
Число сообщений, посланное успешно в удаленную очередь | Нет | 0 |
InvalidDestCount |
MQLONG |
Число сообщений, которые возможно не посланы | Нет | 0 |
ResolvedQName |
MQCHAR48 |
Разрешенное имя очереди назначения | Нет | Строка Null или пробел |
ResolvedQMgrName |
MQCHAR48 |
Разрешенное имя менеджера назначения | Нет | Строка Null или пробел |
RecsPresent |
MQLONG |
Число записей помещенных сообщений или ответных записей в настоящее время | Нет | 0 |
PutMsgRecFields |
MQLONG |
Флаг, индицирующий, что MQPMR поле присутствует |
MQPMRF_NONE |
0 |
PutMsgRecOffset |
MQLONG |
Погашение записи первого помещенного сообщения с момента старта MQPMO |
Нет | 0 |
ResponseRecOffset |
MQLONG |
Погашение записи первого ответа с момента старта MQPMO |
Нет | 0 |
PutMsgRecPtr |
MQPTR |
Адрес записи первого помещенного в очередь сообщения | Нет | Указатель Null |
ResponseRecPtr |
MQPTR |
Адрес записи первого ответа | Нет | Указатель Null |
Среди опций для управления следует назвать:
MQPMO_NEW_MSG_ID - генерирует новый идентификатор сообщенияMQPMO_NEW_CORREL_ID - генерирует новый корреляционный идентификатор и заменяет поле CorrelId в опции MQMD этим идентификатором.MQPMO_LOGICAL_ORDER - определяет, что сообщения в группах и сегментах пишутся в логическом порядке.MQPMO_FAIL_IF_QUIESCING - выдает ошибку, если менеджер не доступен.MQPMO_SYNCPOINT ( MQPMO_NO_SYNCPOINT ) - означает установку (отмену установки) контрольной точки (syncpoint control) на данном сообщении.MQ_MSG_HEADER_LENGTH - определяется для очереди передачи (Полный список опций .
Функция может положить сообщение как в локальную ( считывает сообщения только из локальной очереди локального менеджера очередей, но не может читать сообщения на удаленном менеджере.
MQCLOSE – функция, закрывающая подключение к очереди, с которой работает приложение.Синтаксис:
MQCLOSE (Hconn, Hobj, Options,
CompCode, Reason)
где:
Hconn |
- | |
Hobj |
- | |
ObjDesc |
- | описание объекта MQOD |
Options |
- | опции объекта |
CompCode |
- | |
Reason |
- |
MQDISC - функция для отключения приложения от менеджера очередейСинтаксис:
MQDISC (Hconn, CompCode, Reason)
где:
Hconn |
- | |
CompCode |
- | |
Reason |
- |
Для работы приложений в условиях промышленной эксплуатации необходимо использовать дополнительные функции
Одним из важнейших приемов прикладного программирования для , , можно открыть транзакцию, завершить транзакцию успешно и откатить транзакцию, соответственно. В этом механизме прослеживается полная аналогия с транзакциями в базах данных. Программирование с использованием
MQBEGIN - функция, которая открывает Синтаксис:
MQBEGIN (Hconn, BeginOptions,
CompCode, Reason)
где:
Hconn |
- | |
BeginOptions |
- | опции |
CompCode |
- | |
Reason |
- |
Здесь BeginOptions дает ссылку на структуру MQBO (Begin options), поля которой показаны в таблице 8.6
Имя поля MQBO |
Тип поля | Имя поля | Имя константы | Значение константы |
|---|---|---|---|---|
StrucId |
MQCHAR4 |
Идентификатор структуры | MQBO_STRUC_ID |
'BObb' |
Version |
MQLONG |
Номер версии структуры | MQBO_VERSION_1 |
1 |
Options |
MQLONG |
Опции для управления MQBO |
MQBO_NONE |
0 |
На языке С макропеременная MQBO_DEFAULT содержит значения, приведенные в табл.8.6, и может быть использована в тексте следующим образом: MQBO MyBO = {MQBO_DEFAULT};
MQCMIT – функция, которая указывает на то, что все сообщения, прочитанные и записанные с момента открытия транзакции, становятся постоянными, то есть транзакция успешно завершена. Сообщения, помещенные в очередь как часть блока сообщений, становятся доступными всем приложениям. Сообщения, прочитанные из очереди как часть блока сообщений, удаляются из очередиСинтаксис:
MQCMIT (Hconn, CompCode, Reason)
Комментарии в данном случае излишни.
MQBACK - функция, которая указывает на то, что всем сообщениям, прочитанным и записанным с момента открытия транзакции, дается задний ход, то есть производится откат транзакции. Все сообщения, помещенные в очередь, удаляются из нее. Все сообщения, прочитанные из очереди, восстанавливаются в очереди (становятся доступными) MQBEGIN .Синтаксис:
MQBACK (Hconn, CompCode, Reason)
Работа функций , и будет на примере продемонстрирована в лекции 9.
Следующие группы функций позволяют считывать и модифицировать атрибуты
MQINQ – функция, которая возвращает массив цифр и множество символьных строк, содержащих параметры объекта. В качестве объектов могут выступать очередь, процесс, именованный список (namelist), менеджер очередейСинтаксис:
MQINQ (Hconn, Hobj, SelectorCount, Selectors,
IntAttrCount, IntAttrs,
CharAttrLength, CharAttrs,
CompCode, Reason)
где:
Hconn |
- | |
Hobj |
- | идентификатор объекта, полученный от |
SelectorCount |
- | Счетчик атрибутов, которые должны быть извлечены (от 0 до 256) |
Selectors |
- | Массив значений атрибутов, т.е. чисел или символов, которые должны быть извлечены |
IntAttrCount |
- | Счетчик цифровых атрибутов |
IntAttrs |
- | Массив цифровых атрибутов |
CharAttrLength |
- | Длина буфера символьных атрибутов |
CharAttrs |
- | Буфер значений символьных атрибутов |
CompCode |
- | |
Reason |
- |
Комментарии. Буфер . Работа функций и будет продемонстрирована позже на примере.
MQSET – функция, изменяющая атрибуты объекта, представленного своим идентификатором. Объектом может быть только очередьСинтаксис (аналогичен ):
MQSET (Hconn, Hobj, SelectorCount, Selectors,
IntAttrCount, IntAttrs,
CharAttrLength, CharAttrs,
CompCode, Reason)
где:
Hconn |
- | |
Hobj |
- | идентификатор объекта, полученный от |
SelectorCount |
- | Счетчик атрибутов, которые должны быть установлены (от 0 до 256) |
Selectors |
- | Массив значений атрибутов, т.е. чисел или символов, которые должны быть установлены |
IntAttrCount |
- | Счетчик цифровых атрибутов |
IntAttrs |
- | Массив цифровых атрибутов |
CharAttrLength |
- | Длина буфера символьных атрибутов |
CharAttrs |
- | Буфер значений символьных атрибутов |
CompCode |
- | |
Reason |
- |
Комментарии. Буфер .
MQCONNХ – функция, которая обеспечивает подключение приложения к менеджеру очередейСинтаксис:
MQCONNХ (QMgrName, ConnectOpts, Hconn,
CompCode, Reason)
Функция отличается от наличием параметра ConnectOpts для контроля процесса подключения к менеджеру очередей и позволяет установить дополнительные опции. Опции MQCNO_STANDARD_BINDING и MQCNO_FASTPATH_BINDING служат для стандартного или быстрого установления связи. Опции MQCNO_HANDLE_SHARE_NONE, MQCNO_HANDLE_SHARE_BLOCK, MQCNO_HANDLE_SHARE_NO_BLOCK позволяют осуществлять управление
Опции .
MQPUT1 – функция, которая помещает одно сообщение в очередь, при этом очередь не должна быть открыта MQPUT1 по сравнению с MQPUT не требует команды MQOPEN и MQCLOSE .Синтаксис:
MQPUT1 (Hconn, ObjDesc, MsgDesc, PutMsgOpts,
BufferLength, Buffer, CompCode,
Reason)
Как следствие такого определения функции вместо параметра Hobj для в используется параметр ObjDesc, как и в функции .
На этом обзор основных и дополнительных функций
В заключении следует отметить, что разработчикам приложений необходимо выбирать язык программирования исходя из решаемой задачи и требований на создаваемое ПО. Если приложение должно работать с
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.