ibm-mq - RFH2 - 标头的格式是什么?
问题描述
我尝试构建一条xml
消息以将其注入 IBM MQ。
要使用的格式应该是RFH2
. 你知道吗,你有关于xsd
标题格式(?)的任何文档吗?
谢谢你。
解决方案
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 客户端接收到消息时不会进行不必要的转换。
推荐阅读
- scala - Scala:类型的模式匹配但排除特定的子类型?
- python - Quiver 3d(python matplotlib):如何为箭头轴和箭头头获得相同的颜色?(颤抖虫?)
- java - 如何使用正则表达式从以下字符串中以对象格式(不使用 POJO)从给定字符串中获取字段名称
- scala - 如何从spark中的字符串列中提取数字部分并在数学运算后更新相同的列值
- laravel - 3张表Laravel之间的多对多关系
- go - Redis、Mongo 或出站 Http 调用的内部跟踪未在 kibana 中显示
- cryptography - BIP39 校验和有时会失败
- docusignapi - JSON Docusign 内联多个文档
- c++ - 发送期望获得引用的对象时出现编译错误
- java - 无法连接到服务器:连接被拒绝 (0x0000274D/10061) PostgreSQL