我有一个带有下面配置的spring核心应用程序。
我正在使用UserCredentialsConnectionFactoryAdapter,MQQueueConnectionFactory和jms-listener。
<jms:listener-container container-type="default"
connection-factory="userConnectionFactory" acknowledge="auto">
<jms:listener destination="${QUEUE_NAME_IN_GEN}" ref="messageListener"
method="onMessage" />
</jms:listener-container>
<bean id="userConnectionFactory"
class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="targetConnectionFactory">
<ref bean="mqConnectionFactory" />
</property>
<property name="username" value="${MQ_USER_ID}" />
</bean>
<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="hostName">
<value>${MQ_HOST_NAME}</value>
</property>
<property name="port">
<value>${MQ_PORT}</value>
</property>
<property name="queueManager">
<value>${QUEUE_MANAGER}</value>
</property>
<property name="transportType">
<value>1</value>
</property>
</bean>
在应用程序启动时,监听器完美地整合了一台机器。 当我在不同的服务器上尝试使用相同的工件时,监听器无法启动以下错误:
[org.springframework.jms.listener.DefaultMessageListenerContainer#0-1] ERROR org.springframework.jms.listener.DefaultMessageListenerContainer.refreshConnectionUntilSuccessful(DefaultMessageListenerContainer.java:909) - Could not refresh JMS Connection for destination 'R.ABCDEF' - retrying in 5000 ms. Cause: MQJMS2005: failed to create MQQueueManager for 'myhost:dev'; nested exception is com.ibm.mq.MQException: MQJE001: An MQException occurred: Completion Code 2, Reason 2058
MQJE036: Queue manager rejected connection attempt
为了弄清楚它是否与第二台服务器上的Unix帐户权限问题有关,我编写了一个简单的MQ客户端应用程序。该程序可以连接到此队列管理器并从中读取消息。
还有什么可能是错的?
答案 0 :(得分:0)
2058表明队列管理器名称不正确。根据IBM的技术说明,这是最常见的原因,但还有其他原因。
以下摘录摘自technote:
确保在以下位置正确指定了队列管理器名称:
- MQCONN API调用
- QREMOTE对象定义
- 客户端连接渠道定义
调试QCF,TCF或客户端连接问题要复杂得多。
- 确保将连接请求路由到目标计算机和队列管理器。
- 验证侦听程序是否在正确的队列管理器上启动通道。
- 确保客户端环境变量的规范正确无误。
- MQSERVER
- mqchllib
- mqchltab
如果您使用的是客户端通道表(amqclchl.tab),请验证您的客户端连接通道定义是否具有指定的正确队列管理器名称(QMNAME)。
- 指定正确的队列管理器名称。
- 纠正渠道路由问题。
- 纠正inetd侦听器配置问题。
- 纠正客户端相关的配置问题。