具有 java 个客户端的 IBM MQ AMS
IBM MQ AMS with java clients
我有一个 java 应用程序,它可以发送和接收消息 to/from 队列,我正在尝试将其设置为在 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
,并尝试了运行 JmsProducer/JmsConsumer
再次使用这个新的 java 7
,反对我的旧 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
不过,如果我切换到 java6,仍然可以收到这些消息。
请有人指出我可能遗漏的方向,这会阻止 java 7/8 应用程序从队列中接收编码消息,而 java 6 应用程序继续正常工作? WebSphere MQ 7.5 是否与 java 7/8 一起工作?
根据 WMQ System Requirements page for v7.5 on Linux,目前尚不支持 JTE 8.0。
就其价值而言,v8.0 具有与您所见相同的要求 here. The top-level System requirements page for all versions is here。
也就是说,听起来您遇到的是策略或证书问题,而不是 JRE 问题。发送加密邮件时,发件人必须拥有收件人证书的 public 密钥。收件人必须拥有发件人的 public 密钥。当然,两者都必须有自己的个人证书。 AMS 策略必须指定所有可能的收件人,即使其中之一是发件人。
您尚未发布策略设置或密钥库详细信息。这些将需要调试它(并且可能发布在不同的问题中,因为这个问题是在 JRE 版本上)。此外,2035 会引发事件消息。启用授权事件并将 MS0P SupportPac 安装到 MQ 资源管理器中以在 SYSTEM.ADMIN.QMGR.EVENT
队列中查看它们。
我有一个 java 应用程序,它可以发送和接收消息 to/from 队列,我正在尝试将其设置为在 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
,并尝试了运行 JmsProducer/JmsConsumer
再次使用这个新的 java 7
,反对我的旧 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
不过,如果我切换到 java6,仍然可以收到这些消息。 请有人指出我可能遗漏的方向,这会阻止 java 7/8 应用程序从队列中接收编码消息,而 java 6 应用程序继续正常工作? WebSphere MQ 7.5 是否与 java 7/8 一起工作?
根据 WMQ System Requirements page for v7.5 on Linux,目前尚不支持 JTE 8.0。
就其价值而言,v8.0 具有与您所见相同的要求 here. The top-level System requirements page for all versions is here。
也就是说,听起来您遇到的是策略或证书问题,而不是 JRE 问题。发送加密邮件时,发件人必须拥有收件人证书的 public 密钥。收件人必须拥有发件人的 public 密钥。当然,两者都必须有自己的个人证书。 AMS 策略必须指定所有可能的收件人,即使其中之一是发件人。
您尚未发布策略设置或密钥库详细信息。这些将需要调试它(并且可能发布在不同的问题中,因为这个问题是在 JRE 版本上)。此外,2035 会引发事件消息。启用授权事件并将 MS0P SupportPac 安装到 MQ 资源管理器中以在 SYSTEM.ADMIN.QMGR.EVENT
队列中查看它们。