Spring JMS:为@JmsListener注解的方法设置ErrorHandler

Posted

技术标签:

【中文标题】Spring JMS:为@JmsListener注解的方法设置ErrorHandler【英文标题】:Spring JMS : Set ErrorHandler for @JmsListener annotated method 【发布时间】:2017-03-31 23:26:36 【问题描述】:

我正在使用@JmsListener 注释方法监听JMS 消息,如下所示。

@JmsListener(destination="exampleQueue")  
public void fetch(@Payload String message)  
    process(message);  

当这个方法执行导致异常时,我得到一个警告日志

Execution of JMS message listener failed, and no ErrorHandler has been set.

如何设置ErrorHandler 来处理此案。我正在使用 spring boot 1.3.3.RELEASE

【问题讨论】:

在这里回答:***.com/questions/8922532/… 谢谢@sarahTheButterFly。通过在提供的链接中参考 Kuchi 答案得到解决方案。我已经调整了答案以适应我的情况。我在下面发布我的答案 【参考方案1】:

在使用 @EnableJms@JmsListener 等注解来处理 Spring JMS 时,可以像这样设置 ErrorHandler

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory, ExampleErrorHandler errorHandler) 
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setErrorHandler(errorHandler);
    return factory;


@Service
public class ExampleErrorHandler implements ErrorHandler   
    @Override
    public void handleError(Throwable t) 
        //handle exception here
    

更多详情请点击此处:Annotation-driven listener endpoints

【讨论】:

以上是关于Spring JMS:为@JmsListener注解的方法设置ErrorHandler的主要内容,如果未能解决你的问题,请参考以下文章

如何等待@JMSListener注释方法在JUnit中完成

Spring 4.1 @JmsListener 配置

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

如何在启动时以编程方式禁用 Spring @JmsListener

我怎样才能停止/启动/暂停@JmsListener(干净的方式)

如何使用spring boot jms收听话题