JMS 消息侦听器的执行失败,并且未设置错误处理程序

2022-09-01 12:04:51

当我使用Spring收听JMS消息时,我收到了上述错误。

我想知道如何将错误处理程序添加到JMS侦听器中?


答案 1

AbstractMessageListenerContainer上有一个属性:

<bean id="listener" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="errorHandler" ref="someHandler"/>
    <property name="destinationName" value="someQueue"/>
    <property name="connectionFactory" ref="connectionFactory"/>
</bean>

哪里是实现错误处理程序的beansomeHandler

@Service
public class SomeHandler implements ErrorHandler {

    @Override
    public void handleError(Throwable t) {
        log.error("Error in listener", t);
    }
}

但请注意,根据文档

此消息侦听器的默认行为 [...] 将在错误级别记录任何此类异常。[...]但是,如果需要错误处理,则可以将 ErrorHandler 策略的任何实现提供给 setErrorHandler(ErrorHandler) 方法。

查看您的日志,也许异常已经记录?


答案 2

我喜欢它简短而甜蜜!

    @Bean
JmsListenerContainerFactory<?> jmsContainerFactory(ConnectionFactory connectionFactory) {
    SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setErrorHandler(t -> {
         log.error("Error in listener!", t);
       });
    return factory;
}

推荐