将个性化数据添加到MQ RFH2标头

时间:2017-04-15 19:06:02

标签: java ibm-mq

我正在尝试在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 

1 个答案:

答案 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>"});