SpringBoot JMS侦听器:无法刷新目标的JMS连接



我有一个Spring Boot应用程序,它通过组件类的@JmsListener注释侦听IBM MQ队列,如下所示。MQ属性(主机名、通道、端口等(是从yaml文件中设置的。

@JmsListener(destination = "<QueueName>")
public void receiveMessage(BytesMessage msg) { 
//snippet to read msg
}

MQ依赖项添加在渐变构建中,如下所示,

compile("com.ibm.mq:mq-jms-spring-boot-starter:0.0.2") {  
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}

只要我使用Tomcat容器在本地运行应用程序,就可以很好地监听消息。但如果我将其打包为EAR并部署到Wesbhere8.5服务器,它会抛出以下异常,并且侦听器不会从队列中读取消息。我确认所有运行时依赖项都打包在EAR中。尝试使用不同版本的MQ依赖项,但没有成功。

2018-07-10 15:21:16531错误DefaultMessageListenerContainer-无法刷新目标"QueueName"的JMS连接-使用FixedBackOff重试{interval=5000,currentAttempts=34,maxAttempts=unlimited}。原因:JMSFMQ6312:中发生异常Java(tm(MQI。;嵌套异常是com.ibm.mq.jmqi.JmqiException:CC=2;RC=2195;AMQ9546:收到错误返回代码。[1=java.lang.reflect.InvocationTargetException[null],3=NativeConstructorAccessorImpl.newInstance0]

需要帮助来解决此问题。

我遇到了类似的问题。发生这种情况是因为JMS应用程序的IBM MQ连接缺少配置。在我的案例中,我得到了一个与授权相关的异常,但我为IBM mq设置了正确的用户凭据。当我检查IBM mq站点时,userName不同,这不是我在spring应用程序中配置的。

#IBM MQ JMS Configuration
ibm.mq.queueManager={QUEUE_MANAGER}
ibm.mq.channel={CHANNEL_NAME}
ibm.mq.connName={HOST_NAME(HOST_PORT)}
ibm.mq.user={USER_NAME}
ibm.mq.password={PASSWORD}

然后,我将以下属性添加到使用队列管理器进行身份验证时使用兼容模式。在这里,我们覆盖身份验证模式。MQ V8或V9的当前维护级别通常不需要这样做,但一些早期级别有时会出错,然后可以将此标志设置为"0">false";

ibm.mq.user-authentication-m-q-c-s-p=false

有关的更多详细信息,请参阅本页

最新更新