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 |