【问题标题】:MQ message received as byte array instead of StringMQ 消息作为字节数组而不是字符串接收
【发布时间】:2017-04-04 18:47:04
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 您使用的是什么版本的 Websphere MQ?
  • @JoseChavez 我认为是 7.0.1,但这只是基于 MQ Explorer,还有其他方法可以找出答案吗? (我无权访问队列正在运行的盒子)
  • 您可能需要询问您的系统管理员。但我在下面提供了答案。

标签: java jms ibm-mq


【解决方案1】:

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

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

This article 解释 MQ 消息到 JMS 消息的转换。

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

【讨论】:

  • 谢谢,这很有用。通过更改我的测试以发送具有此类型Message<byte[]> 的消息,我能够重现错误,我可能只需添加一个转换器,以便我可以处理字符串和字节 [] 消息。
  • 很高兴它有帮助!是的,我尝试将我们的一些流程转换为使用 MQ API 中的 JMS,但我仍在解决问题。我们的外部客户端使用 MQ API,有时他们使用 EBCDIC 向我们发送大型机消息!
【解决方案2】:

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

我让它在 Python2.7 和 Pymqi 中工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2014-11-04
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2019-03-25
    相关资源
    最近更新 更多