MQRFH2 头包含消息结构和消息的目标使用者的信息,使消息代理可以处理消息并将它传递或发布到那些使用者。
MQRFH2 值应该放入前置头(通常为 MQMD)的 Format 字段中。MQFMT_RF_HEADER_2 常量由该值定义。
对于 C 编程语言,MQFMT_RF_HEADER_2_ARRAY 常量也已被定义。该常量与 MQFMT_RF_HEADER_2 具有相同的值,但它是字符数组而不是字符串。
MQRFH2 头中的字段的字符集和编码如下所示:
一些字符集有从属于编码的表示。 如果 NameValueCCSID 定义其中某个字符集,则 NameValueData 必须与 MQRFH2 头中的其他字段处于相同的编码中。
MQRFH2 头包含下列字段:
字段名称 | 描述 | 详细信息 |
---|---|---|
StrucId | 结构标识 | 该值必须为 MQRFH_STRUC_ID,是用于规则和格式化头结构的标识。 对于 C 编程语言,还定义了 MQRFH_STRUC_ID_ARRAY 常量,该常量与 MQRFH_STRUC_ID 具有相同的值,但它是字符数组而不是字符串。 |
Version | 结构版本号 | 该值必须为 MQRFH_VERSION_2,是版本 2 规则和格式化头结构。 |
Struclength | MQRFH2 的总长度(包含NameValueData) | 该字段的初始值为 MQRFH_STRUC_LENGTH_FIXED_2,是 MQRFH2 头结构固定部分的长度。 这是以字节为单位的 MQRFH2 头结构的长度,包括结构末端的任何 NameValueLength 和 NameValueData 字段。 在结构结束处可能有多对此类字段,其顺序为:length1, data1, length2, data2, ....... 在结构末端,跟在结尾的 NameValueData 字段之后的任何用户数据长度不包括在 StrucLength 中。 注: 如果 Struclength 不是四的倍数,在一些操作系统环境中,用户数据转换时可能发生问题。
|
Encoding | 跟随在 NameValueData 之后的数据的数字编码 | 该字段的初始值为 MQENC_NATIVE。 该字段指定在任何跟随在最后 NameValueData 字段之后的数据中,数值如何表示。这适用于二进制整数数据、压缩十进制整数数据和浮点数据。 |
CodedCharSetId | 跟随在 NameValueData 之后的数据的字符集标识 | 该字段的初始值为 MQCCSI_INHERIT,表示字符集标识与当前结构中的相同。 该字段标识跟随在最后 NameValueData 字段之后的数据中任何字符串的编码字符集。 |
Format | 跟随在 NameValueData 之后的数据的格式名称 | 该字段的初始值为 MQFMT_NONE。 该字段指定跟随在最后 NameValueData 字段之后的任何数据的格式名。该名称应当以空白填充满该字段的长度。 注: 在该字段结束前,不要使用空字符来终止该名称;在 MQRFH2 头中,队列管理器不更改为空白字符、空字符或跟随空字符的任何字符。
注: 不要使用行距或嵌入空白字符来指定名称。
|
Flags | 标志 | 该字段的初始值为 MQRFH_NONE,表示没有标志。 |
NameValueCCSID | NameValueData 的字符集标识 | 该字段的初始值是 1208,这意味着使用 UTF-8 编码字符集。 该字段标识 NameValueData 字段中数据的编码字符集。这与 MQRFH2 头结构中其他字符串的字符集不同,并且或许与跟随在最后 NameValueData 字段之后的任何字符数据的字符集也不同。 NameValueCCSID 必须具有下列某个值: 1200:UCS-2 无终止的 1208:UTF-8 13488:UCS-2 2.0 子集 17584:UCS-2 2.1 子集(包含欧元符号 €) 对于 UCS-2 字符集,NameValueData 字段的编码(字节顺序)必须与 MQRFH2 头结构中其他字段的编码相同。 注: 不支持代用字符(X'D800' 到 X'DFFF')。
|
下列两个字段是可选的,但是如果显示,它们必须成对出现。 可以根据需要成对重复它们任意次。 如果这些字段出现多次,它们的顺序必须为:..... length1, data1, length2, data2, ....... |
||
NameValueLength | NameValueData 的长度 | 该字段以字节为单位指定跟随在其后的 NameValueData 字段的长度。 注: 如果 NameValueLength 不是四的倍数,则跟随在 NameValueData 字段之后的数据在进行转换时可能出现问题。
|
NameValueData | 这是一个包含使用类似 XML 结构进行编码的数据的可变长度字符串。 | 该字符串的长度以字节为单位,由在 NameValueData 字段之前的 NameValueLength 字段给定。 要避免发生与 NameValueLength 字段的描述一起提供的注释中的问题,可以使用空格扩展该字段以使其长度达到四的倍数,或者使用空字符来终止字段。 |
typedef struct tagMQRFH2 { MQCHAR4 StrucId; /* Structure identifier */ MQLONG Version; /* Structure version number */ MQLONG StrucLength; /* Total length of MQRFH2 including NameValueData */ MQLONG Encoding; /* Numeric encoding of data that follows NameValueData */ MQLONG CodedCharSetId; /* Character set identifier of data that follows NameValueData */ MQCHAR8 Format; /* Format name of data that follows NameValueData */ MQLONG Flags; /* Flags */ MQLONG NameValueCCSID; /* Character set identifier of NameValueData */ } MQRFH2;