【问题标题】:IBM MQ AMS with java clients带有 java 客户端的 IBM MQ AMS
【发布时间】:2015-07-15 22:26:38
【问题描述】:

我有一个 java 应用程序,它可以向队列发送和接收消息,我正在尝试将其设置为在 Linux 上使用 MQ AMS

这是我第一次设置MQ AMS,所以我正在尝试MQ distribution (JmsProvider/JmsConsumer) 中提供的示例。

最初,我尝试了WebSphere MQ 7.5,它带有预打包的java 6,我可以设置它,创建一个队列,使用附加的样本发送和接收编码消息。

但是,我的应用程序与java 6 不兼容。

我下载了ibm jdk 8,并尝试进行设置。

如果消息没有编码,它可以工作;但是,如果启用了安全策略,我可以使用 WebSphere 自己的 JmsProducer 将消息发送到队列,但无法使用自己的 JmsConsumer 获取消息 - 得到一个通用的 MQRC_NOT_AUTHORISED 错误(与下面的错误相同,除了Java 版本)。我关闭了channel authorisation,并确保我用来创建消息的用户在队列管理器上被指定为MCAUSER。但是,我的用户不在 mqm group 中,因为该组不存在(而且我的 Linux 发行版不会对 addgroup 做出反应,而不是 unknown command)。

然后我认为可能是我拥有的java 8 分发版缺少对MQ 至关重要的东西,所以我下载了WebSphere MQ 8,其中包含java 7,并尝试使用这个新的@987654343 再次运行JmsProducer/JmsConsumer @,反对我的旧 MQ 7.5 队列。结果是一样的——生产者成功生成消息并将消息放入队列,但消费者因not authorised 而失败。

[userName@machineName ~]$ /opt/mqm/java/jre64/jre/bin/java -showversion -classpath $CLASSPATH JmsConsumer -m QM_TEST_AMS -d TEST.Q -h hostName -p 1616 -l CHANNEL > JmsConsumer.output
java version "1.7.0"
Java(TM) SE Runtime Environment (build pxa6470_27sr2-20141026_01(SR2))
IBM J9 VM (build 2.7, JRE 1.7.0 Linux amd64-64 Compressed References 20141017_217728 (JIT enabled, AOT enabled)
J9VM - R27_Java727_SR2_20141017_1632_B217728
JIT  - tr.r13.java_20141003_74587.01
GC   - R27_Java727_SR2_20141017_1632_B217728_CMPRSS
J9CL - 20141017_217728)
JCL - 20141004_01 based on Oracle 7u71-b13

com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2008: Failed to open MQ queue 'TEST.Q'.
JMS attempted to perform an MQOPEN, but WebSphere MQ reported an error.
Use the linked exception to determine the cause of this error. Check that the specified queue and queue manager are defined correctly.
Inner exception(s):
com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
FAILURE

如果我切换到 java 6,仍然可以收到这些消息。 请有人指出我可能遗漏的方向,这会阻止 java 7/8 应用程序从队列接收编码消息,而 java 6 应用程序继续正常工作? WebSphere MQ 7.5 是否与 java 7/8 一起工作?

【问题讨论】:

    标签: java linux ibm-mq


    【解决方案1】:

    根据WMQ System Requirements page for v7.5 on Linux,尚不支持JTE 8.0。

    就其价值而言,v8.0 具有与here 相同的要求。所有版本的顶级系统要求页面is here

    也就是说,听起来您遇到了政策或证书问题,而不是 JRE 问题。发送加密消息时,发件人必须拥有收件人证书的公钥。收件人必须拥有发件人的公钥。当然,两者都必须有自己的个人证书。 AMS 策略必须指定所有可能的收件人,即使其中一个是发件人。

    您尚未发布您的策略设置或密钥库详细信息。这些将需要调试这个(并且可能发布在另一个问题中,因为这个问题是在 JRE 版本上)。此外,2035 会引发事件消息。启用授权事件并将MS0P SupportPac 安装到MQ Explorer 以在SYSTEM.ADMIN.QMGR.EVENT 队列中查看它们。

    【讨论】:

    • T.Rob,非常感谢您的回复和链接。如果我仍然有问题,我将再次尝试使用 java 7 并稍后发布更具体的问题。非常感谢您的帮助。
    • 有趣的是,我对 java 7 的问题原来是我的用户没有队列的“浏览”权限(只有 put/get/inquire)。自从我打开它后,样本就按预期工作了。
    • 太棒了!事件消息和 MS0P 插件将帮助您在将来立即发现这些类型的问题。它会告诉您哪个 API 调用失败、失败的对象、使用了哪些选项(即浏览)以及使用哪个 ID 进行权限检查。然后 dsmpqaut 给你剩下的。
    猜你喜欢
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 2020-05-14
    • 1970-01-01
    • 2021-01-02
    • 2011-07-22
    相关资源
    最近更新 更多