【问题标题】:How to generate WebSphere MQ Message from Spring JMS?如何从 Spring JMS 生成 WebSphere MQ 消息?
【发布时间】: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


【解决方案1】:

其中 Tomcat context.xmlJNDI provider for MQ,我是这样做的:

<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"

【讨论】:

  • 这与使用 Java 配置的 Spring JMS 客户端对应的是什么?
  • 在定义目标名称时使用targetClient 属性:queue:///MY.REQ.QUEUE?targetClient=1
猜你喜欢
  • 2012-08-27
  • 2013-01-09
  • 2014-04-19
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2013-12-27
相关资源
最近更新 更多