2

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

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

4

3 回答 3

2

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

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

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

于 2010-03-31T01:34:12.907 回答
1

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

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

于 2011-11-23T17:11:26.463 回答
0

从 MQ 文档:

在 MQMD 包含与 JMS 字段等效的字段的情况下,JMS 字段映射到 MQMD 字段。其他 MQMD 字段作为 JMS 属性公开,因为 JMS 应用程序在与非 JMS 应用程序通信时可能需要获取或设置这些字段。

您正在寻找的属性可能是“ JMSXAppID ”。

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

此外,“管理员通过将目标的 TARGCLIENT 属性设置为 MQ 来指示 JMS 应用程序正在与此类应用程序进行通信。

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

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

于 2009-02-12T13:10:27.813 回答