您好,我正在尝试在 RFH2 MQ header 中添加数据。 我想要的数据格式是:
struc id : RFH
version:2
encoding:546
CodedCharSetid:437
Format:MQSTR
Flags:0
NameValeCCSID:1208
NamevalueLen:56
Namevaluedata:<mcd><msd>jms_text<Msd><Type>Hello</type></mcd>
NamvalueLen:56
NameValuedata:<jms><dst></dst></jms>
NamevalueLen:56
NameValuedata:<usr>Hi</usr>
我有以下代码,但我不明白如何添加 NameValueLen 和 NAMEVALUEDATA 部分。有人可以检查我编写的代码并进一步指导我吗?
MQMessage msg = new MQMessage();
msg.format = MQC.MQFMT_RF_HEADER_2; // Msg Format
msg.writeString(MQC.MQRFH_STRUC_ID); // StrucId
msg.writeInt4(MQC.MQRFH_VERSION_2); // Version
msg.writeInt4(MQC.MQRFH_STRUC_LENGTH_FIXED_2 + folderLength + 4);
msg.writeInt4(MQC.MQENC_NATIVE); // Encoding
msg.writeInt4(MQC.MQCCSI_DEFAULT); // CodedCharacterSetId
msg.writeString(MQC.MQFMT_NONE); // Format (content)
msg.writeInt4(MQC.MQRFH_NO_FLAGS); // Flags
msg.writeInt4(1208); // NameValueCCSID = UTF-8
最佳答案
我不知道您使用的是什么工具,但这使问题变得困惑。 MQRFH2 有“文件夹”。第一个文件夹始终是“mcd”。第二个文件夹是“jms”。之后的所有文件夹都是可选的。
注意:“usr”文件夹是放置用户数据的位置。
你为什么不使用 MQRFH2 class在MQ?
https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_8.0.0/com.ibm.mq.dev.doc/q030950_.htm
即您应该这样做:
MQMessage mqMsg = new MQMessage();
MQRFH2 rfh2 = new MQRFH2();
rfh2.setEncoding(CMQC.MQENC_NATIVE);
rfh2.setCodedCharSetId(CMQC.MQCCSI_INHERIT);
rfh2.setFormat(CMQC.MQFMT_STRING);
rfh2.setNameValueCCSID(1208);
rfh2.setFieldValue("usr", "somefield", "somedata");
try
{
rfh2.write(mqMsg);
}
catch (IOException e)
{
System.err.println(e.getLocalizedMessage());
}
注意:在上面的代码中,将自动创建并填充文件夹“mcd”和“jms”。
您可以一次性炸毁所有 3 个文件夹(“mcd”、“jms”和“usr”)。我不推荐它,除非你知道自己在做什么。
rfh2.setFolderStrings(new String[]{"<mcd><Msd>jms_text</Msd></mcd>",
"<jms><Dst>queue:///TEST.Q1</Dst><Pri>0</Pri></jms>",
"<usr><somefield>somedata</somefield></usr>"});
关于java - 将个性化数据添加到 MQ RFH2 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43430134/