【问题标题】:How to set MQMD ApplicationID field via JMS API?如何通过 JMS API 设置 MQMD ApplicationID 字段?
【发布时间】:2010-10-07 03:31:44
【问题描述】:

我正在使用 JMS API 将消息发送到 Websphere MQ 服务器。 提取我创建的消息的应用程序希望我设置 ApplicationID 字段 在 MQMD 结构中为常量值。 我在 JMS API 中找不到访问 MQMD 结构的方法

问题:有没有办法做到这一点?如果是,那怎么办?如果没有,那是我唯一的选择 是使用MQ java API,而不是JMS API?

【问题讨论】:

  • 你用的是什么版本的MQ?

标签: java jakarta-ee jms ibm-mq


【解决方案1】:

来自 MQ 文档:

Where the MQMD includes a field that is equivalent to the JMS field, the JMS field is mapped onto the MQMD field. Additional MQMD fields are exposed as JMS properties, because a JMS application may need to get or set these fields when communicating with a non-JMS application.

您要查找的属性可能是“JMSXAppID”。

如果这不起作用,请查看文档。有很多奇怪的东西,例如“如果应用程序使用与代理的实时连接,则本节不适用。” (所以你不想要“与经纪人的实时连接”......不管这意味着什么)。

还有“The administrator indicates that the JMS application is communicating with such an application by setting the TARGCLIENT property of the destination to MQ.

如果这没有意义,您必须创建测试用例来帮助您了解 MQ 在幕后所做的事情。创建一条 JMS 消息,将所有属性设置为一些奇怪的值,然后将其发送到一个非活动的 MQ 队列,您可以在其中检查它。这样,您就可以确定哪些字段映射在哪里。

完成后,您可以尝试其他方式。如果您的 JMS 实现不允许您以映射或其他形式获取消息的所有属性,请使用 Java 调试器查看内存中的数据。 Field.setAccessible(true) 是你的朋友。

【讨论】:

  • 谢谢,但这不起作用。我写了一些应用程序,它使用 MQ API for java 将 hello world 消息放入队列并将 applicationIdData 字段设置为某个值。然后我有一个获取消息的 MDB,并且消息中的所有属性都没有值我已经设置好了。
【解决方案2】:

从 v7.0 开始,您可以将所有 MQMD 字段作为 JMS 消息属性读取,并且可以以相同的方式设置其中的许多字段。

见:http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/jm41030_.htm

不过,客户端和 WMQ 服务器都必须是 v7.0 或更高版本才能使用此功能。

【讨论】:

    【解决方案3】:

    可以从收到的消息中读取 MQMD 字段。通过调用 setMQMDReadEnabled(true) 方法在目标上设置 MQMDReadEnabled 属性。

    然后您可以使用 getStringProperty 方法读取 applicationIdentityData。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 2012-04-20
      相关资源
      最近更新 更多