MQMDE 概述
可用性: 所有 IBM® MQ 系统以及连接到这些系统的 IBM MQ 客户机。
用途:MQMDE 结构描述有时发生在应用程序消息数据之前的数据。 该结构包含 version-2 MQMD 中存在但 version-1 MQMD 中不存在的那些 MQMD 字段。
格式名:MQFMT_MD_EXTENSION。
字符集和编码:MQMDE 中的数据必须采用本地队列管理器的字符集和编码; 这些数据由 C 编程语言的 CodedCharSetId queue-manager 属性和 MQENC_NATIVE 提供。
CodedCharSetId 和 Encoding 字段中:- MQMD (如果 MQMDE 结构位于消息数据的开头) ,或者
- MQMDE 结构之前的头结构 (所有其他情况)。
如果 MQMDE 不在队列管理器的字符集和编码中,那么将接受但不接受 MQMDE ,即将 MQMDE 视为消息数据。
- 在 MQPUT 和 MQPUT1 调用上指定
- MQGET 调用返回
- 在传输队列上的消息中
Format 字段设置为 MQFMT_MD_EXTENSION 以指示存在 MQMDE。 如果应用程序未提供 MQMDE ,那么队列管理器将为 MQMDE 中的字段采用缺省值。 队列管理器使用的缺省值与结构的初始值相同; 请参阅 表 1。| 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
- 应用程序消息数据