【发布时间】:2015-06-05 13:50:55
【问题描述】:
我有点纠结。我正在尝试通过 jms 读取 WMQ 的消息,然后将其转换为 pcf 消息进行处理。我只能找到一个关于这方面的资源,它并不是很有帮助 [http://www-01.ibm.com/support/docview.wss?uid=swg21395682 的底部]
我已经尝试在上面的文档中实现该技术,但每次我都要排队
PCFMessage response = new PCFMessage(dataInput);
我抛出 MQRC 3013 - MQRCCF_STRUCTURE_TYPE_ERROR
这是我的代码的样子,也许你能看到我看不到的东西。
BytesMessage message = null;
do {
// The consumer will wait 10 seconds (10,000 milliseconds)
message = (BytesMessage) myConsumer.receive(10000);
// get the size of the bytes message & read into an array
int bodySize = (int) message.getBodyLength();
byte[] data = new byte[bodySize];
message.readBytes(data, bodySize);
// Read into Stream and DataInput Stream
ByteArrayInputStream bais = new ByteArrayInputStream(data);
DataInput dataInput = new DataInputStream(bais);
// Pass to PCF Message to process
//MQException.logExclude(new Integer(2079));
PCFMessage qStatsPcf = new PCFMessage(dataInput);
session.commit();
if (message != null) {
processMessage(qStatsPcf);
}
} while (message != null);
myConsumer.close();
针对 T.Rob 的回答进行了一些更新。 我目前正在运行 MQ 7.0。这是什么类型的东西,我目前无法升级。
至于我想要做什么,我正在从 SYSTEM.ADMIN.STATISTICS.QUEUE 中提取消息,并且我想解析这些信息以用于审计目的。转换为 PCF 消息的原因是我希望从这些消息中提取一些 PCF 参数 - 例如 .getParameter(PCFConstants.MQIAMO_PUTS)
无论如何,我都不会尝试向 MQ 发送消息,只是将消息拉出并处理它们。
【问题讨论】:
-
您确定您真的收到的是 BytesMessage 而不是 TextMessage?如果是这种情况,QM 的代码页和 java 字符串之间的转换会破坏 PCF。
-
嗨 Stavr00,我收到了一个 JMSMessage 类:jms_bytes 消息,而不是文本消息。
-
"我当前正在运行 MQ 7.0" 客户端还是服务器?要考虑的最重要的版本是客户端版本,因为这是影响代码的类打包发生的地方。您找到 PCF Java 示例了吗?尽管它们都没有查看事件消息,但所有它们都从命令处理器以 PCF 格式接收响应,因此它们都演示了如何解析和处理入站 PCF 消息。读取命令响应的相同技术同样适用于读取事件消息。我在跳飞机。 4-5 小时后重新上线。祝你好运!
-
另请参阅您的客户端版本的修复列表。如果那是 v7.0,请注意 PCF 消息的许多问题,包括一个产生 MQRCCF_STRUCTURE_TYPE_ERROR 的问题:www-01.ibm.com/support/docview.wss?uid=swg27014224 至少,如果您无法升级,至少要确保您有修复(在客户端)解决任何看似匹配的 PCF 问题。