我们开发了一个基于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
注册为异常监听器,需要进行其他设置吗?