首页 > 解决方案 > RFH2 - 标头的格式是什么?

问题描述

我尝试构建一条xml消息以将其注入 IBM MQ。

要使用的格式应该是RFH2. 你知道吗,你有关于xsd标题格式(?)的任何文档吗?

谢谢你。

标签: ibm-mqrfh2

解决方案


MQ 的 RFH2 是一个可扩展的标头,它由一个固定格式的二进制结构和一个具有类似 XML 语法的可变部分组成。

该结构在此处的知识中心中进行了描述(以基本术语):

https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.1.0/com.ibm.mq.ref.dev.doc/q099070_.htm

一些 MQ 客户端(例如 JMS 和 .NET)会自动在它们发送的消息前加上 RFH2 标头。如果您使用这些客户端之一,那么您可能不需要自己对 RFH2 进行编码 - 它将为您添加。

您是否有更多关于为什么应用程序需要 RFH2 标头的信息?RFH2 通常用于携带消息属性,因此如果您要构建自己的 RFH2,则需要确保正确编码这些属性。

如果应用程序正在使用 MQ JMS 或 .NET 客户端,那么它将期望消息中的 RFH2 标头按照以下主题中所述进行格式化:

https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.1.0/com.ibm.mq.dev.doc/q032000_.htm

您可能会发现以下实用程序 (rfhutil) 有助于理解 RFH2 标头和调试您的应用程序:

https://github.com/ibm-messaging/mq-rfhutil

请注意,RFH2 标头的可变部分使用类似 XML 的语法,但不支持或理解 XML 的所有功能,因此您不应尝试将 XML 有效负载包含在 RFH2 标头的可变部分中......而是XML 文档应遵循消息中的 RFH2。

最后要注意的一点是,MQ 可以根据消息的格式和 CCSID 执行代码页转换,但这对于 XML 文档很少需要(它通常描述文档的字符编码,它自己的声明如下:<?xml version="1.0" encoding="UTF-8" standalone="no" ?>.因此,我建议您将 RFH2 中的 Format 字段设置为“MQFMT_NONE”,以便将 XML 文档视为二进制数据,并且在 MQ 客户端接收到消息时不会进行不必要的转换。


推荐阅读