【发布时间】:2019-06-16 17:56:31
【问题描述】:
我需要生成 WebSphere MQ 消息格式的队列消息。默认情况下,spring 以 JMS 格式生成消息。我用谷歌搜索并知道 WebSphere MQ 消息格式包含 MQMD 和 RFH2 标头。不知道如何从 Spring 生成这两个。
【问题讨论】:
-
该产品在 2014 年 6 月发布 v8.0 时已重命名为 IBM MQ,任何称为 Websphere MQ 的版本都将是 7.5 或更低版本,此时已不受支持。所有发送到 MQ 的消息都有一个
MQMD(MQ 消息描述符),不管它是通过 C 应用程序、.NET 还是 JMS 生成的。通常,当人们谈论由用于 JMS 的 IBM MQ 类生成的消息时,值得注意的区别是 JMS 消息默认具有称为RFH2的链式标头,因此MQMD消息类型将为MQHRF(不是错字)后跟第 2 版 RFH 标头,然后是正文。 -
对于任何读取具有
MQMD+RFH2的消息的现代 MQ 客户端,对于非 JMS 客户端来说这不是问题,因为 MQ 客户端会静默地将 RFH2 属性转换为 MQMD 属性,并且该应用程序将只接收消息的正文。问题在于 v7.0 之前的旧 MQ,它会将 RFH2 显示为消息正文的一部分。要防止发送 RFH2 标头,您可以将targetClient=1添加到 URI,例如:queue:///REQ.QUEUE2?targetClient=1 -
如果这是您要查找的内容,请告诉我,我可以用这些详细信息写出答案。请注意,如果是上述情况,则接收应用程序可能使用了不受支持的 MQ 客户端库。
-
@JoshMc 我明白你的意思,我正在向 IBM MQ 8.0 发送 JMS 消息,并从 IBM DB2 侦听器读取该消息,该侦听器从队列中读取消息并将其传递给存储过程。现在侦听器给出消息不是 WebSphere MQ 消息格式的异常。可能它需要 RFH2 标头和 MQHRF 类型。如何在我的 JMS 消息中生成这两个?如果您可以参考,任何 JAR 或依赖项?
-
@FahadShakeel 在 Tomcat context.xml JNDI 配置中我是这样做的:
<Resource name="jms/myreqqueue" auth="Container" type="com.ibm.mq.jms.MQQueue" factory="com.ibm.mq.jms.MQQueueFactory" QU="MY.REQ.QUEUE" TC="1"/>。注意 TC="1"。在 Spring JMS 中,我引用了这样的队列:destination-name="jms/myreqqueue".
标签: spring-boot ibm-mq spring-jms