MQRFH2 头和 JMS

此主题集合描述 MQRFH 版本 2 头,该头包含与消息内容关联的特定于 JMS的数据。 MQRFH 版本 2 头是可扩展的,并且还可以包含未与 JMS直接关联的其他信息。 但是,本部分仅涵盖 JMS对其的使用。 有关完整描述,请参阅 MQRFH2 -规则和格式化头 2
此头分两部分:固定部分和可变部分。
固定部分
固定部分是根据 标准 IBM® MQ 头模式建模的,由以下字段组成:
StrucId (MQCHAR4)
结构标识。

必须为 MQRFH_STRUC_ID(值:RFH )(初始值)。

同样定义了 MQRFH_STRUC_ID_ARRAY(值:RFH )。

Version (MQLONG)
结构版本号。

必须为 MQRFH_VERSION_2(值:2)(初始值)。

StrucLength (MQLONG)
MQRFH2 总长度(包括 NameValueData 字段)。

设置到 StrucLength 的值必须是 4 的倍数(可使用空格字符填补 NameValueData 字段中的数据以达到此要求)。

Encoding (MQLONG)
数据编码。

对 MQRFH2 之后的消息部分中的任何数字数据(下一个头或此头之后的消息数据)进行编码。

CodedCharSetId (MQLONG)
编码字符集标识。

表示 MQRFH2 之后的消息部分中的任何字符数据(下一个头或此头之后的消息数据)。

Format (MQCHAR8)
格式名称。

MQRFH2 之后的消息部分的格式名称。

Flags (MQLONG)
标志。

MQRFH_NO_FLAGS = 0。 未设置标志。

NameValueCCSID (MQLONG)
此头中包含的 NameValueData 字符串的编码字符集标识 (CCSID)。 可以在与头(StrucID 和 Format)中包含的其他字符串不同的字符集中对 NameValueData 进行编码。

如果 NameValueCCSID 为双字节 Unicode CCSID(1200、13488 或 17584),那么 Unicode 的字节顺序与 MQRFH2 中的数字字段的字节定序相同。 (例如,Version、StrucLength 和 NameValueCCSID 本身。)

表 1. NameValueCCSID 字段的可能的值
CCSID 含义
1200 UTF-16,支持最新的 Unicode 版本
13488 UTF-16,Unicode V2.0 子集
17584 UTF-16,Unicode V3.0 子集(包含欧元符号 €)
1208 UTF-8,支持最新的 Unicode 版本
可变部分
可变部分在固定部分之后。 可变部分包含 MQRFH2 文件夹的可变编号。 每个文件夹均包含元素或属性的可变编号。 文件夹将相关属性分组到一起。 JMS 创建的 MQRFH2 头可以包含以下任何文件夹:
mcd 文件夹

mcd 包含描述消息的格式的属性。 例如,消息服务域 Msd 属性将 JMS 消息标识为 JMSTextMessageJMSBytesMessageJMSStreamMessageJMSMapMessageJMSObjectMessage 或 null。

mcd 文件夹始终出现在包含 MQRFH2 的 JMS 消息中。

它始终显示在包含从 IBM Integration Bus 发送的 MQRFH2 的消息中。 它描述消息的域、格式、类型和消息集。

表 2. mcd 属性名称,同义词,数据类型和文件夹
属性同义词 属性名 数据类型 文件夹
mcd.Msd string <mcd><Msd>messageDomain</Msd></mcd>
mcd.Set string <mcd><Set>messageDomain</Set></mcd>
mcd.Type string <mcd><Type>messageDomain</Type></mcd>
mcd.Fmt string <mcd><Fmt>messageDomain</Fmt></mcd>

不要在 mcd 文件夹中添加您自己的属性。

jms 文件夹

jms 包含 JMS 头字段,以及无法在 MQMD 中完全表达的 JMSX 属性。 jms 文件夹始终显示在 JMS MQRFH2 中。

usr 文件夹

usr 包含与消息关联的应用程序定义 JMS 属性。 仅当应用程序已设置应用程序定义的属性时,usr 文件夹才存在。

mqext 文件夹
mqext 包含以下类型的属性:
  • 仅由 WebSphere® Application Server 使用的属性。
  • 与消息延迟传递相关的属性。
如果应用程序至少设置了一个 IBM 定义的属性或已使用的交付延迟,那么该文件夹存在。
表 3. mqext 属性名称,同义词,数据类型和文件夹
属性同义词 属性名 数据类型 文件夹
JMSArmCorrelator mqext.Arm string <mqext><Arm>armCorrelator</Arm></mqext>
JMSRMCorrelator mqext.Wrm string <mqext><Wrm>wrmCorrelator</Wrm></mqext>
JMSDeliveryTime mqext.Dlt i8 <mqext><Dlt>DeliveryTime</Dlt></mqext>
JMSDeliveryDelay mqext.Dly i8 <mqext><Dly>DeliveryTime</Dly></mqext>

不要在 mqext 文件夹中添加您自己的属性。

mqps 文件夹

mqps 包含仅由 IBM MQ 发布/预订使用的属性。 仅当应用程序已设置至少一个集成的发布/预订属性时,该文件夹才存在。

表 4. mqps 属性名称,同义词,数据类型和文件夹
属性同义词 属性名 数据类型 文件夹
MQTopicString mqps.Top string <mqps><Top>topicString</Top></mqps>
MQSubUserData mqps.Sud string <mqps><Sud>subscriberUserData...</Sud></mqps>
MQIsRetained mqps.Ret boolean <mqps><Ret>isRetained</Ret></mqps>
MQPubOptions mqps.Pub i8 <mqps><Pub>publicationOptions</Pub></mqps>
MQPubLevel mqps.Pbl i8 <mqps><Pbl>publicationLevel</Pbl></mqps>
MQPubTime mqpse.Pts string <mqps><Pts>publicationTime</Pts></mqps>
MQPubSeqNum mqpse.Seq i8 <mqps><Seq>publicationSequenceNumber</Seq></mqps>
MQPubStrIntData mqpse.Sid string <mqps><Sid>publicationData</Sid></mqps>
MQPubFormat mqpse.Pfmt i8 <mqps><Pfmt>messageFormat</Pfmt></mqps>

不要在 mqps 文件夹中添加您自己的属性。

表 5 显示了属性名的完整列表。
表 5. JMS 使用的 MQRFH2 文件夹和属性
JMS 字段名称 Java 类型 MQRFH2 文件夹名称 属性名 类型/值
JMSDestination Destination jms Dst 字符串
JMSExpiration long jms Exp i8
JMSPriority int jms Pri i4
JMSDeliveryMode int jms Dlv i4
JMSCorrelationID 字符串 jms Cid 字符串
JMSReplyTo Destination jms Rto 字符串
JMSTimestamp long jms Tms i8
JMSType 字符串 mcd Type、Set、Fmt 字符串
JMSXGroupID 字符串 jms Gid 字符串
JMSXGroupSeq int jms Seq i4
xxx(用户定义) 任意 usr xxx 任意
    mcd Msd
jms_none
jms_text
jms_bytes
jms_map
jms_stream
jms_object
NameValueLength (MQLONG)
直接跟在该长度字段(不包括本身长度)后的 NameValueData 字符串字节长度。
NameValueData (MQCHARn)
单个字符串,其字节长度由前面的 NameValueLength 字段给出。 它包含具有一系列属性的文件夹。 每个属性均为名称/类型/值三元组,包含在其名称为文件夹名称的 XML 元素中,如下所示:
<foldername>
triplet1 triplet2 .....  tripletn </foldername>
结束 </foldername> 标记后面可以后跟空格作为填充字符。 每个三元组均使用类似 XML 的语法进行编码:
<name dt='datatype'>value</name>
dt='datatype' 元素是可选的,许多属性都省略了该元素,因为数据类型是预定义的。 如果包含此项,那么 dt= 标记之前必须添加一个或多个空格字符。
name
是属性的名称; 请参阅 表 5
datatype
在折叠后,必须匹配 表 6中列出的其中一种数据类型。
value
是要传达的值的字符串表示,使用 表 6中的定义。
使用以下语法对空值进行编码:
<name dt='datatype' xsi:nil='true'></name>
不要使用 xsi:nil='false'
表 6. 属性数据类型
数据类型 定义
字符串 任何字符序列(不包括 <&
布尔值 字符 01 (0 = false,1 = true)
bin.hex 表示八位元的十六进制数字
i1 使用数字 0..9 表示的数字,带有可选符号(无小数或指数)。 必须在 -128 到 127(含)之间
i2 使用数字 0..9 表示的数字,带有可选符号(无小数或指数)。 必须在 -32768 到 32767(含)之间
i4 使用数字 0..9 表示的数字,带有可选符号(无小数或指数)。 必须在 -2147483648 到 2147483647(含)之间
i8 使用数字 0..9 表示的数字,带有可选符号(无小数或指数)。 必须在 -9223372036854775808 到 92233720368547750807(含)之间
int 使用数字 0..9 表示的数字,带有可选符号(无小数或指数)。 必须在与 i8 相同的范围之间。 如果发送方不想将特定的精度与属性相关联,可使用它来代替其中一种 i* 类型
r4 浮点数,幅度 <= 3.40282347E+38 且 >= 1.175E-37,使用数字 0..9、可选符号、可选小数位数、可选指数表示
r8 浮点数,幅度 <= 1.7976931348623E+308 且 >= 2.225E-307,使用数字 0..9、可选符号、可选小数位数、可选指数表示
字符串值可以包含空格。 必须在字符串值中使用以下转义序列:
  • &amp; 表示 & 字符
  • &lt; 表示 < 字符
您可以使用以下转义序列,但它们不是必需的:
  • &gt; 表示 > 字符
  • &apos; 表示 ' 字符
  • &quot; 表示 " 字符