JMS消息侦听器的执行失败,并且未设置ErrorHandler
当我使用Spring收听JMS消息时,我收到了上述错误。
我想知道如何将Errorhandler添加到JMS侦听器中?
AbstractMessageListenerContainer
上有一个属性:
someHandler
是一个实现ErrorHandler
的bean:
@Service public class SomeHandler implements ErrorHandler { @Override public void handleError(Throwable t) { log.error("Error in listener", t); } }
但请注意,根据文档 :
此消息侦听器的默认行为[…]将在错误级别记录任何此类exception 。 […]但是,如果需要进行error handling,则可以向setErrorHandler(ErrorHandler)方法提供ErrorHandler策略的任何实现。
查看您的日志,可能已经记录了exception?
没有xml配置。 我在ApplicationContext中执行了以下操作。
@Bean JmsListenerContainerFactory> jmsContainerFactory(ConnectionFactory connectionFactory, SomeHandler errorHandler) { SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setErrorHandler(errorHandler); return factory; } // From Tomasz answer @Service public class SomeHandler implements ErrorHandler { @Override public void handleError(Throwable t) { log.error("Error in listener", t); } }
我喜欢简短而甜蜜!
@Bean JmsListenerContainerFactory> jmsContainerFactory(ConnectionFactory connectionFactory) { SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setErrorHandler(t -> { log.error("Error in listener!", t); }); return factory; }
如果使用默认工厂:
@Bean public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory, SomeHandler errorHandler) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setErrorHandler(errorHandler); return factory; }