1

我正在使用 Websphere MQ 并使用 Spring 集成和 jms 适配器从队列中读取消息。

当我手动将消息添加到队列时,应用程序正在读取它们并将数据作为 a 读取String,一切都很好。

但是,当外部方将消息添加到队列时,应用程序会将它们作为字节数组读取,然后抛出此异常:

Caused by: java.lang.ClassCastException: [B cannot be cast to java.lang.String

这些消息在 MQExplorer 中对我来说是一样的。

虽然我注意到了一个 Format 列,其中作为字符串处理MQSTR的消息具有值,而作为 Byte[] 处理的消息在其中没有任何内容。这可能有关系吗?如果有任何想法如何设置消息的“格式”?

有谁知道是什么决定了消息的有效负载内容类型,这样我至少可以重新创建问题?

4

2 回答 2

4

我以前也遇到过这种情况。外部方可能没有使用 JMS,但可能正在使用 MQI 或用于 Java 的 Websphere MQ 类。

这意味着您可能会以字节消息的形式接收消息。

本文介绍 MQ 消息到 JMS 消息的转换。

我会与外部方交谈并询问他们如何发送消息。他们可能必须向您提供他们正在设置的 MQMD 属性的详细信息。您可能必须在 MessageListener 中检索这些信息。

于 2013-01-16T17:51:23.500 回答
1

在本地 MQ 消息发送方,设置 mqmd["Format"] = 'MQSTR' 将确保消息以 jms_text 格式发送,否则默认为字节格式。

我让它在 Python2.7 中与 Pymqi 一起工作。

于 2017-03-29T00:41:58.560 回答