MQMDE-消息描述符扩展

概述

用途:MQMDE 结构描述有时发生在应用程序消息数据之前的数据。 该结构包含 version-2 MQMD 中存在但 version-1 MQMD 中不存在的那些 MQMD 字段。

格式名:FMMDE。

字符集和编码:MQMDE 中的数据必须包含由 CodedCharSetId 队列管理器属性提供的字符集以及由 ENNAT 为 C 编程语言提供的本地队列管理器的编码。

MQMDE 的字符集和编码必须设置在以下位置的 MDCSIMDENC 字段中:
  • MQMD (如果 MQMDE 结构位于消息数据的开头) ,或者
  • MQMDE 结构之前的头结构 (所有其他情况)。

如果 MQMDE 不在队列管理器的字符集和编码中,那么将接受但不接受 MQMDE ,即将 MQMDE 视为消息数据。

用法: 正常应用程序应使用 version-2 MQMD ,在这种情况下,它们不会迂到 MQMDE 结构。 但是,在某些情况下,专用应用程序以及继续使用 version-1 MQMD 的应用程序可能会迂到 MQMDE。 MQMDE 结构可能在以下情况下发生:
  • 在 MQPUT 和 MQPUT1 调用上指定
  • MQGET 调用返回
  • 在传输队列上的消息中

MQPUT 和 MQPUT1 调用上指定的 MQMDE

在 MQPUT 和 MQPUT1 调用上,如果应用程序提供 version-1 MQMD ,那么应用程序可以选择使用 MQMDE 作为消息数据的前缀,将 MQMD 中的 MDFMT 字段设置为 FMMDE 以指示存在 MQMDE。 如果应用程序未提供 MQMDE ,那么队列管理器将为 MQMDE 中的字段采用缺省值。 队列管理器使用的缺省值与结构的初始值相同-请参阅 表 2

如果应用程序提供了 version-2 MQMD ,并且 以 MQMDE 作为应用程序消息数据的前缀,那么将处理结构,如 表 1中所示。

表 1. 在 MQPUT 或 MQPUT1 上指定 MQMDE 时的队列管理器操作
MQMD 版本 version-2 字段的值 MQMDE 中相应字段的值 队列管理器执行的操作
1 - 有效 已采用 MQMDE
2 缺省 有效 已采用 MQMDE
2 不是缺省值 有效 MQMDE 被视为消息数据
第 1 年或第 2 年 任意 无效 调用失败,并带有相应的原因码
第 1 年或第 2 年 任意 MQMDE 的字符集或编码错误,或者是不受支持的版本 MQMDE 被视为消息数据

有一个特殊情况。 如果应用程序使用 version-2 MQMD 来放置作为段的消息 (即,设置了 MFSEG 或 MFLSEG 标志) ,并且 MQMD 中的格式名称为 FMDLH ,那么队列管理器会生成 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 中的 MDFMT 字段设置为值 FMMDE ,以指示存在 MQMDE。

如果应用程序在 BUFFER 参数启动时提供 MQMDE ,那么将忽略 MQMDE。 从 MQGET 调用返回时,会将其替换为消息的 MQMDE (如果需要) 或由应用程序消息数据覆盖 (如果不需要 MQMDE)。

如果 MQGET 调用返回 MQMDE ,那么 MQMDE 中的数据通常采用队列管理器的字符集和编码。 但是,在下列情况下, MQMDE 可能采用其他一些字符集和编码:
  • MQMDE 被视为 MQPUT 或 MQPUT1 调用上的数据 (请参阅 表 1 以了解可能导致此情况的情况)。
  • 从通过 TCP 连接连接的远程队列管理器接收到消息,并且未正确设置接收消息通道代理程序 (MCA) (请参阅 IBM® MQ for IBM i 对象的安全性 以获取更多信息)。

传输队列上的消息中的 MQMDE

传输队列上的消息以 MQXQH 结构为前缀,其中包含 version-1 MQMD。 MQMDE 也可能存在,位于 MQXQH 结构和应用程序消息数据之间,但通常仅当 MQMDE 中的一个或多个字段具有非缺省值时才会存在。

其他 IBM MQ 头结构也可能发生在 MQXQH 结构与应用程序消息数据之间。 例如,当死信头 MQDLH 存在且消息不是段时,顺序为:
  • MQXQH (包含 version-1 MQMD)
  • MQMDE
  • MQDLH
  • 应用程序消息数据

字段

MQMDE 结构包含以下字段; 这些字段按 字母顺序进行描述:

MECSI (10 位有符号整数)

MQMDE 之后的数据的字符集标识。

这指定 MQMDE 结构之后的数据的字符集标识; 它不适用于 MQMDE 结构本身中的字符数据。

在 MQPUT 或 MQPUT1 调用上,应用程序必须将此字段设置为适合于数据的值。 队列管理器不会检查此字段是否有效。 可以使用以下特殊值:
CSINHT
继承此结构的字符集标识。

遵循 此结构的数据中的字符数据与此结构位于同一字符集中。

队列管理器将消息中发送的结构中的此值更改为结构的实际字符集标识。 如果未发生错误,那么 MQGET 调用不会返回值 CSINHT。

如果 MQMD 中 MDPAT 字段的值为 ATBRKR ,那么不能使用 CSINHT。

此字段的初始值为 CSUNDF。

MEENC (10 位有符号整数)
MEENC (10 位有符号整数)

这指定 MQMDE 结构之后的数据的数字编码; 它不适用于 MQMDE 结构本身中的数字数据。

在 MQPUT 或 MQPUT1 调用上,应用程序必须将此字段设置为适合于数据的值。 队列管理器不会检查该字段是否有效。 请参阅 MQMD-消息描述符 中描述的 MDENC 字段,以获取有关数据编码的更多信息。

此字段的初始值为 ENNAT。

MEFLG (10 位有符号整数)

常规标志。

可以指定以下标志:
梅夫农
没有标志。

此字段的初始值为 MEFNON。

MEFMT (8 字节字符串)

MQMDE 之后的数据的格式名称。

这指定遵循 MQMDE 结构的数据的格式名称。

在 MQPUT 或 MQPUT1 调用上,应用程序必须将此字段设置为适合于数据的值。 队列管理器不会检查此字段是否有效。 请参阅 MQMD-消息描述符 中描述的 MDFMT 字段,以获取有关格式名称的更多信息。

此字段的初始值为 FMNONE。

MEGID (24 字节位字符串)

组标识。

请参阅 MQMD-消息描述符中描述的 MDGID 字段。 此字段的初始值为 GINONE。

MELEN (10 位有符号整数)

MQMDE 结构的长度。

定义了以下值:
MELEN2
version-2 消息描述符扩展结构的长度。

此字段的初始值为 MELEN2。

MEMFL (10 位有符号整数)

消息标志。

请参阅 MQMD-消息描述符中描述的 MDMFL 字段。 此字段的初始值为 MFNONE。

MEOFF (10 位带符号整数)

物理消息中的数据与逻辑消息开头的偏移量。

请参阅 MQMD-消息描述符中描述的 MDOFF 字段。 此字段的初始值为 0。

MEOLN (10 位有符号整数)

原始消息的长度。

请参阅 MQMD-消息描述符中描述的 MDOLN 字段。 此字段的初始值为 OLUNDF。

MESEQ (10 位有符号整数)

组中逻辑消息的序号。

请参阅 MQMD-消息描述符中描述的 MDSEQ 字段。 此字段的初始值为 1。

MESID (4 字节字符串)

结构标识。

该值必须为:
MESIDV
消息描述符扩展结构的标识。

此字段的初始值为 MESIDV。

MEVER (10 位有符号整数)

结构版本号。

该值必须为:
MEVER2
Version-2 消息描述符扩展结构。
以下常量指定当前版本的版本号:
MEVERC
消息描述符扩展结构的当前版本。

此字段的初始值为 MEVER2。

初始值

表 2. MQMDE 中字段的初始值
字段名称 常量的名称 常量值
MESID MESIDV 'MDE¬'
MEVER MEVER2 2
MELEN MELEN2 72
MEENC ENNAT 取决于环境
MECSI CSUNDF 0
MEFMT FMNONE 空白
MEFLG 梅夫农 0
MEGID 吉诺尼 Null
MESEQ None 1
MEOFF None 0
MEMFL 0
MEOLN 奥罗达夫 -1
注:
  1. 符号 ¬ 表示单个空白字符。

RPG 声明

     D*..1....:....2....:....3....:....4....:....5....:....6....:....7..
     D*
     D* MQMDE Structure
     D*
     D* Structure identifier
     D  MESID                  1      4    INZ('MDE ')
     D* Structure version number
     D  MEVER                  5      8I 0 INZ(2)
     D* Length of MQMDE structure
     D  MELEN                  9     12I 0 INZ(72)
     D* Numeric encoding of data that followsMQMDE
     D  MEENC                 13     16I 0 INZ(273)
     D* Character-set identifier of data thatfollows MQMDE
     D  MECSI                 17     20I 0 INZ(0)
     D* Format name of data that followsMQMDE
     D  MEFMT                 21     28    INZ('        ')
     D* General flags
     D  MEFLG                 29     32I 0 INZ(0)
     D* Group identifier
     D  MEGID                 33     56    INZ(X'00000000000000-
     D                                     0000000000000000000000-
     D                                     000000000000')
     D* Sequence number of logical messagewithin group
     D  MESEQ                 57     60I 0 INZ(1)
     D* Offset of data in physical messagefrom start of logical message
     D  MEOFF                 61     64I 0 INZ(0)
     D* Message flags
     D  MEMFL                 65     68I 0 INZ(0)
     D* Length of original message
     D  MEOLN                 69     72I 0 INZ(-1)