【发布时间】: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 一起工作?
【问题讨论】: