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; }