gpt4 book ai didi

java - 使用 Java 设置 WebSphere MQ RFH2 header

转载 作者:太空宇宙 更新时间:2023-11-04 06:34:06 24 4
gpt4 key购买 nike

我想向 mq 发送一 strip 有 rfh2 header 以及 jms 和 usr 文件夹的消息。作为起点检查此 link并想出了下面的代码。但是,在使用以下代码放置消息后,我收到 MQ 错误代码“2142”(代表不正确的 header 值)。有人可以帮忙解决这个问题吗?另外我如何修改代码以包含 jms 和 usr 内容?

pubCommand = "<psc><Command>Publish</Command><Topic>Stock</Topic>" + 

"<QMgrName>QFLEXT1</QMgrName><QName>QFLEXT1.A</QName></psc>";

int folderLength = pubCommand.length();
MQMessage sendmsg = new MQMessage();
//sendmsg.format = MQC.MQFMT_STRING;
sendmsg.format = MQC.MQFMT_RF_HEADER_2; // Msg Format
sendmsg.feedback = MQC.MQFB_NONE;
sendmsg.messageType = MQC.MQMT_DATAGRAM;
sendmsg.replyToQueueName = "MY.TEST.Q";
sendmsg.replyToQueueManagerName = qManager;
sendmsg.writeString(MQC.MQRFH_STRUC_ID); // StrucId
sendmsg.writeInt4(MQC.MQRFH_VERSION_2); // Version
sendmsg.writeInt4(MQC.MQRFH_STRUC_LENGTH_FIXED_2 + folderLength + 4);
sendmsg.writeInt4(MQC.MQENC_NATIVE); // Encoding
sendmsg.writeInt4(MQC.MQCCSI_DEFAULT); // CodedCharacterSetId
sendmsg.writeString(MQC.MQFMT_NONE); // Format (content)
sendmsg.writeInt4(MQC.MQRFH_NO_FLAGS); // Flags
sendmsg.writeInt4(1208); // NameValueCCSID = UTF-8
sendmsg.writeInt4(folderLength);
sendmsg.writeString(pubCommand);
MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the defaults, same
// as MQPMO_DEFAULT constant

String line = "test message";
sendmsg.clearMessage();
sendmsg.messageId = MQC.MQMI_NONE;
sendmsg.correlationId = MQC.MQCI_NONE;
sendmsg.writeString(line);

// put the message on the queue
queue.put(sendmsg, pmo);

最佳答案

正确答案是使用消息的提供者应该使用受支持的现代 WebSphere MQ 版本。在任何当前版本中,消息的使用者都可以指定他们是否想要查看 RFH2 header 或消息属性。无论消息生产者使用哪种方法,MQ 都会进行必要的转换。

但如果您必须以困难的方式做到这一点,请考虑以下事项:

// many lines to prepare the message body are executed here    
String line = "test message";
sendmsg.clearMessage();
// WTF?? ^^^^^^^^^^ Doesn't this wipe out the RFH2 headers you just added?
// Any reason NOT to expect incorrect header values error?
sendmsg.writeString(line);
queue.put(sendmsg, pmo);

根据clearMessage page在知识中心“此方法会清除 MQMessage 对象的数据缓冲区部分。数据缓冲区中的所有消息数据都会丢失,因为 MessageLength、DataLength 和 DataOffset 均设置为零。

因此,当您开始将“测试消息”写入消息正文时,您刚刚添加的所有 RFH2 header 都消失了,并且消息长度重置为零。考虑到没有 RFH2 header 供 QMgr 解析,收到的错误似乎是合适的。

关于消息使用者让 MQ 提供 RFH2 header 的能力,请参阅:PROPCTL queue options在 MQ 知识中心,特别是 FORCE 选项。

关于java - 使用 Java 设置 WebSphere MQ RFH2 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25667217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com