我正在尝试在RFH2 MQ标头中添加数据。 我想要的数据格式是:
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
答案 0 :(得分:1)
我不知道你使用的是什么工具,但是这个问题令人困惑。 MQRFH2有“文件夹”。第一个文件夹总是“mcd”。第二个文件夹是“jms”。之后的所有文件夹都是可选的。
注意:“usr”文件夹是您放置用户数据的位置。
为什么不在MQ中使用MQRFH2 class?
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”。
你可以在1张镜头中爆炸所有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>"});