com.ibm.mq.MQQueue vs. com.ibm.mq.jms.MQQueue?



我正在尝试将原始 MQSTR 消息放在 WebSphere MQ 队列中。据此,我可以做:

((com.ibm.mq.jms.MQQueue) queue).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);

以指示它是非 JMS 队列。(我知道JMSC.MQJMS_CLIENT_NONJMS_MQ已被弃用 - 这与这个问题无关。但是,我一直在使用com.ibm.mq.MQQueue而不是com.ibm.mq.jms.MQQueue。从前者到后者的转换不起作用。此外,只有com.ibm.mq.jms.MQQueue具有setTargetClient方法。

为什么有两个MQQueue类,我应该使用哪一个?我想使用主机名、通道名称和队列管理器名称(而不是 JNDI)在 Java 程序中外部连接到 z/OS 队列。

humm. 我不想给出"RTM"的答案,但这确实是答案。 有 2 个 JAVA MQ API:1 个用于"Java 的 MQ 类",1 个用于"JMS 的 MQ 类"。

注意:"MQ classes for JMS"会将 JMS 标头(又名 MQRFH2)放在消息上,而"MQ classes for Java"则不会。

因此,如果您正在编写常规的Java/MQ应用程序,则不要使用"JMS的MQ类",只需使用"Java的MQ类",您就可以开始了。

使用

((com.ibm.mq.jms.MQQueue) queue).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);

将告诉 JMS 客户端 RFH2 不会被使用,因此发送 JMSTextMessage 将确保纯 MQSTR 格式的消息到达队列。 即目标客户端不是 JMS,因此不需要 RFH2。

坚持使用 JMS API 和 com.ibm.mq.jms.MQQueue 和上面的设置。弃用的原因是使用一组备用常量。此提供的函数未弃用。

本技术说明 http://www-01.ibm.com/support/docview.wss?uid=swg21423244 解释了要使用的常量。

最新更新