IBM MQ忽略由Camel + Spring Boot基于app注册的JMS ExceptionListener

时间:2017-10-25 09:26:19

标签: spring-boot apache-camel ibm-mq

我们开发了一个基于Apache Camel JMS组件和Spring Boot的微服务。 IBM MQ用作消息传递中间件。异常监听器存在问题 - 当与MQ的连接中断时,IBM MQ类无法找到已注册的异常监听器并在系统输出中打印它自己的堆栈跟踪:

com.ibm.msg.client.jms.internal.JmsProviderExceptionListener
The exception is ignored as no exception listener is registered: '
                   Message : com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ1107: A problem with this connection has occurred.
An error has occurred with the IBM MQ JMS connection.
Use the linked exception to determine the cause of this error.

org.springframework.jms.connection.CachingConnectionFactory用于连接设置。

@Bean
protected final ConnectionFactory createMqJmsConnectionFactory() {
    MQQueueConnectionFactory mqFactory = new MQQueueConnectionFactory();
    // Factory setup
    CachingConnectionFactory cachingFactory = new CachingConnectionFactory(mqFactory);    

    return cachingFactory;
}

CachingConnectionFactory的祖先实现javax.jms.ExceptionListener,正如我在Spring论坛上发现的那样,将自己注册为exceptionListener。从堆栈跟踪中我可以看到异常后调用onException()方法,重置连接并写入日志。

因此,我们遇到IBM MQ忽略CachingConnectionFactory作为异常监听器的情况。 Camel JMS组件具有exceptionListener端点配置选项 - 我假设,此处添加CachingConnectionFactory将是多余的。

为了将CachingConnectionFactory注册为异常监听器,需要进行其他设置吗?

0 个答案:

没有答案