MQMDE-消息描述符扩展
MQMDE 结构描述有时出现在应用程序消息数据之前的数据。 此结构包含存在于 version-2 MQMD 中但不在 version-1 MQMD 中的那些 MQMD 字段。
可用性
所有 IBM® MQ 系统,以及连接到这些系统的 IBM MQ MQI clients 。
格式名
MQFMT_MD_EXTENSION
字符集和编码
MQMDE 中的数据必须采用本地队列管理器的字符集和编码; 这些数据由 C 编程语言的 CodedCharSetId 队列管理器属性和 MQENC_NATIVE 提供。
CodedCharSetId 和 Encoding 字段中:- MQMD (如果 MQMDE 结构位于消息数据的开头) ,或者
- MQMDE 结构之前的头结构 (所有其他情况)。
如果 MQMDE 不在队列管理器的字符集和编码中,那么将接受但不接受 MQMDE ,即 MQMDE 被视为消息数据。
用法
- 在 MQPUT 和 MQPUT1 调用上指定
- MQGET 调用返回
- 在传输队列上的消息中
MQPUT 和 MQPUT1 调用上指定的 MQMDE
Format 字段设置为 MQFMT_MD_EXTENSION 以指示存在 MQMDE。 如果应用程序未提供 MQMDE ,那么队列管理器将为 MQMDE 中的字段采用缺省值。 队列管理器使用的缺省值与结构的初始值相同; 请参阅 表 2。如果应用程序提供了 version-2 MQMD ,并且 以 MQMDE 作为应用程序消息数据的前缀,那么将按下表中所示处理结构。
| MQMD 版本 | version-2 字段的值 | MQMDE 中相应字段的值 | 队列管理器执行的操作 |
|---|---|---|---|
| 1 | - | 有效 | 已采用 MQMDE |
| 2 | 缺省 | 有效 | 已采用 MQMDE |
| 2 | 不是缺省值 | 有效 | MQMDE 被视为消息数据 |
| 第 1 年或第 2 年 | 任意 | 无效 | 调用失败,并带有相应的原因码 |
| 第 1 年或第 2 年 | 任意 | MQMDE 的字符集或编码错误,或者是不受支持的版本 | MQMDE 被视为消息数据 |
注: 在 z/OS®上,如果应用程序指定了带有 MQMDE 的 version-1 MQMD ,那么仅当队列的
IndexType 为 MQIT_GROUP_ID 时,队列管理器才会验证 MQMDE。 |
|||
有一个特殊情况。 如果应用程序使用 version-2 MQMD 来放置作为段的消息 (即,设置了 MQMF_SEGMENT 或 MQMF_LAST_SEGMENT 标志) ,并且 MQMD 中的格式名称为 MQFMT_DEAD_LETTER_HEADER ,那么队列管理器会生成 MQMDE 结构,并将其 插入到 MQDLH 结构及其后的数据之间。 在队列管理器随消息保留的 MQMD 中, version-2 字段设置为其缺省值。
version-2 MQMD 中存在但不存在 version-1 MQMD 的多个字段是 MQPUT 和 MQPUT1上的输入/输出字段。 但是,队列管理器不会在 MQPUT 和 MQPUT1 调用的输出上返回 MQMDE 中等效字段中的任何值; 如果应用程序需要这些输出值,那么它必须使用 version-2 MQMD。
MQGET 调用返回的 MQMDE
在 MQGET 调用上,如果应用程序提供了 version-1 MQMD ,那么队列管理器将以 MQMDE 返回的消息作为前缀,但仅当 MQMDE 中的一个或多个字段具有非缺省值时才如此。 队列管理器将 MQMD 中的 Format 字段设置为值 MQFMT_MD_EXTENSION ,以指示存在 MQMDE。
如果应用程序在 Buffer 参数启动时提供 MQMDE ,那么将忽略 MQMDE。 从 MQGET 调用返回时,会将其替换为消息的 MQMDE (如果需要) 或由应用程序消息数据覆盖 (如果不需要 MQMDE)。
- MQMDE 被视为 MQPUT 或 MQPUT1 调用上的数据 (请参阅 表 1 以了解可能导致此情况的情况)。
- 从通过 TCP 连接连接的远程队列管理器接收到消息,并且未正确设置接收消息通道代理程序 (MCA)。
传输队列上的消息中的 MQMDE
传输队列上的消息以 MQXQH 结构为前缀,其中包含 version-1 MQMD。 MQMDE 也可能存在,位于 MQXQH 结构和应用程序消息数据之间,但通常仅当 MQMDE 中的一个或多个字段具有非缺省值时才存在。
- MQXQH (包含 version-1 MQMD)
- MQMDE
- MQDLH
- 应用程序消息数据
字段
| 字段名称和描述 | 常量的名称 | 常量的初始值 (如果有) |
|---|---|---|
| StrucId (结构标识) | MQMDE_STRUC_ID | 'MDE¬' |
| 版本 (结构版本号) | MQMDE_VERSION_2 | 2 |
| StrucLength (MQMDE 结构的长度) | MQMDE_LENGTH_2 | 72 |
| 编码 (MQMDE 之后的数据的数字编码) | MQENC_NATIVE | 取决于环境 |
| CodedCharSetId(MQMDE 之后数据的字符集标识符) | MQCCSI_UNDEFINED | 0 |
| Format (MQMDE 之后的数据的格式名称) | MQFMT_NONE | 空白 |
| 标志 (常规标志) | MQMDEF_NONE | 0 |
| GroupId (组标识) | MQGI_NONE | Null |
| MsgSeqNumber(组内逻辑报文的序列号) | None | 1 |
| 偏移量 (物理消息中的数据与逻辑消息开始的偏移量) | None | 0 |
| MsgFlags (消息标志) | MQMF_NONE | 0 |
| OriginalLength (原始消息的长度) | MQOL_UNDEFINED | -1 |
备注信息:
|
||
语言声明
MQMDE 的 C 声明
typedef struct tagMQMDE MQMDE;
struct tagMQMDE {
MQCHAR4 StrucId; /* Structure identifier */
MQLONG Version; /* Structure version number */
MQLONG StrucLength; /* Length of MQMDE structure */
MQLONG Encoding; /* Numeric encoding of data that follows
MQMDE */
MQLONG CodedCharSetId; /* Character-set identifier of data that
follows MQMDE */
MQCHAR8 Format; /* Format name of data that follows
MQMDE */
MQLONG Flags; /* General flags */
MQBYTE24 GroupId; /* Group identifier */
MQLONG MsgSeqNumber; /* Sequence number of logical message
within group */
MQLONG Offset; /* Offset of data in physical message from
start of logical message */
MQLONG MsgFlags; /* Message flags */
MQLONG OriginalLength; /* Length of original message */
};
MQMDE 的 COBOL 声明
** MQMDE structure
10 MQMDE.
** Structure identifier
15 MQMDE-STRUCID PIC X(4).
** Structure version number
15 MQMDE-VERSION PIC S9(9) BINARY.
** Length of MQMDE structure
15 MQMDE-STRUCLENGTH PIC S9(9) BINARY.
** Numeric encoding of data that follows MQMDE
15 MQMDE-ENCODING PIC S9(9) BINARY.
** Character-set identifier of data that follows MQMDE
15 MQMDE-CODEDCHARSETID PIC S9(9) BINARY.
** Format name of data that follows MQMDE
15 MQMDE-FORMAT PIC X(8).
** General flags
15 MQMDE-FLAGS PIC S9(9) BINARY.
** Group identifier
15 MQMDE-GROUPID PIC X(24).
** Sequence number of logical message within group
15 MQMDE-MSGSEQNUMBER PIC S9(9) BINARY.
** Offset of data in physical message from start of logical message
15 MQMDE-OFFSET PIC S9(9) BINARY.
** Message flags
15 MQMDE-MSGFLAGS PIC S9(9) BINARY.
** Length of original message
15 MQMDE-ORIGINALLENGTH PIC S9(9) BINARY.
MQMDE 的 PL/I 声明
dcl
1 MQMDE based,
3 StrucId char(4), /* Structure identifier */
3 Version fixed bin(31), /* Structure version number */
3 StrucLength fixed bin(31), /* Length of MQMDE structure */
3 Encoding fixed bin(31), /* Numeric encoding of data that
follows MQMDE */
3 CodedCharSetId fixed bin(31), /* Character-set identifier of data
that follows MQMDE */
3 Format char(8), /* Format name of data that follows
MQMDE */
3 Flags fixed bin(31), /* General flags */
3 GroupId char(24), /* Group identifier */
3 MsgSeqNumber fixed bin(31), /* Sequence number of logical message
within group */
3 Offset fixed bin(31), /* Offset of data in physical message
from start of logical message */
3 MsgFlags fixed bin(31), /* Message flags */
3 OriginalLength fixed bin(31); /* Length of original message */
MQMDE 的 High Level Assembler 声明
MQMDE DSECT
MQMDE_STRUCID DS CL4 Structure identifier
MQMDE_VERSION DS F Structure version number
MQMDE_STRUCLENGTH DS F Length of MQMDE structure
MQMDE_ENCODING DS F Numeric encoding of data that follows
* MQMDE
MQMDE_CODEDCHARSETID DS F Character-set identifier of data that
* follows MQMDE
MQMDE_FORMAT DS CL8 Format name of data that follows MQMDE
MQMDE_FLAGS DS F General flags
MQMDE_GROUPID DS XL24 Group identifier
MQMDE_MSGSEQNUMBER DS F Sequence number of logical message
* within group
MQMDE_OFFSET DS F Offset of data in physical message from
* start of logical message
MQMDE_MSGFLAGS DS F Message flags
MQMDE_ORIGINALLENGTH DS F Length of original message
*
MQMDE_LENGTH EQU *-MQMDE
ORG MQMDE
MQMDE_AREA DS CL(MQMDE_LENGTH)
MQMDE 的 Visual Basic 声明
Type MQMDE
StrucId As String*4 'Structure identifier'
Version As Long 'Structure version number'
StrucLength As Long 'Length of MQMDE structure'
Encoding As Long 'Numeric encoding of data that follows'
'MQMDE'
CodedCharSetId As Long 'Character-set identifier of data that'
'follows MQMDE'
Format As String*8 'Format name of data that follows MQMDE'
Flags As Long 'General flags'
GroupId As MQBYTE24 'Group identifier'
MsgSeqNumber As Long 'Sequence number of logical message within'
'group'
Offset As Long 'Offset of data in physical message from'
'start of logical message'
MsgFlags As Long 'Message flags'
OriginalLength As Long 'Length of original message'
End Type