java - 将个性化数据添加到 MQ RFH2 header

标签 java ibm-mq

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

我有以下代码,但我不明白如何添加 NameValueLenNAMEVALUEDATA 部分。有人可以检查我编写的代码并进一步指导我吗?

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/

相关文章:

java - 如何限制 JMS DefaultMessageListenerContainer 重试消息的次数?

c# - 消息在 IBM MQ 上被覆盖

java - Kafka KStream 应用程序 - 临时文件清理

java - 无法在 NetBeans 中找到 main

java - Websphere MQ 主题 - 它们是否严格排序?

记录 MQ 消息

java - 有没有办法断言枚举自上次修订以来没有改变?

java - 使用正则表达式提取子字符串不起作用

java - 算法需要帮助

jms - ClassCastException : javax.命名。引用不能转换为javax.jms.ConnectionFactory