MQRFH2 头和 JMS
- 固定部分
- 固定部分是根据 标准 IBM® MQ 头模式建模的,由以下字段组成:
- StrucId (MQCHAR4)
- 结构标识。
必须为 MQRFH_STRUC_ID(值:
RFH
)(初始值)。同样定义了 MQRFH_STRUC_ID_ARRAY(值:
R
、F
、H
、
)。 - 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 消息标识为 JMSTextMessage、JMSBytesMessage、JMSStreamMessage、JMSMapMessage、JMSObjectMessage 或 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文件夹始终显示在 JMSMQRFH2中。- usr 文件夹
usr包含与消息关联的应用程序定义 JMS 属性。 仅当应用程序已设置应用程序定义的属性时,usr文件夹才存在。- mqext 文件夹
mqext包含以下类型的属性:- 仅由 WebSphere® Application Server 使用的属性。
- 与消息延迟传递相关的属性。
表 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文件夹中添加您自己的属性。
| 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 dt='datatype' xsi:nil='true'></name>xsi:nil='false'。表 6. 属性数据类型 数据类型 定义 字符串 任何字符序列(不包括 <和&)布尔值 字符 0或1(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、可选符号、可选小数位数、可选指数表示字符串值可以包含空格。 必须在字符串值中使用以下转义序列:&表示&字符<表示<字符
您可以使用以下转义序列,但它们不是必需的:>表示>字符'表示'字符"表示"字符