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 |