【问题标题】:Spring jms to Websphere MQ connection errorSpring jms 到 Websphere MQ 连接错误
【发布时间】:2017-02-03 08:41:40
【问题描述】:

AppConfig.xml 设置:

<bean id="connectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="hostName" value="abchost.com />
<property name="port" value="1414" />
<property name="queueManager" value="ABC_DEV" />
<property name="transportType" value="1" />

<jms:listener-container acknowledge="transacted">
    <jms:listener destination="abc.queue.abc"
            ref="someComplexServiceImpl"
            method="doSomething" />
</jms:listener-container>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="defaultDestinationName" value="abc.queue.abc"/>
</bean>

我收到以下错误:

Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
[9/26/16 13:13:35:758 CST] 000000aa SystemErr     R     at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:204)
[9/26/16 13:13:35:758 CST] 000000aa SystemErr     R     ... 98 more



Cause: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'ABC_DEV' with connection mode 'Client' and host name 'abchost.com(1414)'.; nested exception is com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED')

我想知道的是,我们需要配置的代码或 Websphere MQ 中的某些设置是否有问题?在向我们的 Websphere MQ 管理员(顺便说一下,他是 Websphere MQ 的新手)提出问题之前,我想确保这不是程序中的错误

我们正在使用:

  • Websphere MQ 版本 9

  • Spring JMS 版本 4.2.4.RELEASE

我使用 MQ 客户端连接到 MQ,并且能够连接(通过命令行):

C:\Users\me>set MQSERVER=CH.ABC_DEV/TCP/abchost.com(1414)

C:\Users\me>set MQSAMP_USER_ID=someuser

C:\Users\me>c:\IBM\MQ\Tools\c\Samples\Bin\amqsbcgc.exe abc.queue.abc ABC_DEV

Enter password: p@ssword



--connected!

但是为什么同一用户在通过 WAS 连接时不能工作?

【问题讨论】:

    标签: jms ibm-mq spring-jms jmstemplate


    【解决方案1】:

    尽管我提供了正确的凭据,但我的应用程序也无法连接到 MQ。启用身份验证兼容模式解决了该问题。

    另请参阅:IBM MQ Connection authentication

    如果您使用mq-jms-spring-boot-starter,您可以在 application.properties 中添加: ibm.mq.userAuthenticationMQCP=false

    在内部,这将应用于连接工厂: cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, false);

    【讨论】:

    • 在您的情况下,队列管理器可能不会验证密码,设置兼容性会使队列管理器将您设置的 ID 视为您的程序正在运行的 ID。由于 MQCSP 不适用于您,因此队列管理器只是相信您是那个用户。
    【解决方案2】:

    正如底部的消息清楚地表明,连接尝试被拒绝,原因代码为 2035,未经授权。您的 MQ 管理员必须检查队列管理器端的 MQ 错误日志以了解具体原因。连接认证和授权的设置方式有多种,需要咨询MQ documentation。此外,在设置连接授权后,应用程序可能会在打开队列时失败并显示 2035,因此请继续阅读。

    【讨论】:

    • 用户似乎没有问题,因为我能够使用 MQ 客户端进行连接。我编辑了帖子的内容,请查看更改
    • 您没有显示在 Spring 应用中使用任何凭据。你认为它是从哪里挑选的?
    • 在应用服务器中。现在这似乎是一个应用服务器问题。我正在使用 Websphere
    • 然后使用有关 MQ 凭据的信息更新帖子。我同意 - 如果您有凭据,您认为您正在从命令行使用该工作,但不能在 WAS 下工作,那么这不是 MQ 管理员问题。
    猜你喜欢
    • 2014-09-19
    • 2015-07-08
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多