Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

When I use Spring to listen to JMS messages, I receievd the above error.

I am wondering how to add an Errorhandler into the JMS listener?

like image 324
user705414 Avatar asked Jan 19 '12 07:01

user705414


People also ask

How to implement JMS in Spring Boot?

First you start with the setup of the Spring application. You should place the @EnableJms annotation to enable Jms support and then setup a new queue. The listener component (BookMgrQueueListener. java) is using Spring's @JmsListener annotation with selectors to read the messages with a given Operation header.

Which dependency is needed for JMS in spring boot?

xml file with Spring Boot and ActiveMQ dependencies. Additionally, we will need Jackson for object to JSON conversion.

Which Maven dependencies are required for setting up JMS in spring boot application?

Add dependencies Add Spring Boot, ActiveMQ and Jackson (JSON convertor) dependencies in pom. xml .


2 Answers

There is a property on 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> 

Where someHandler is a bean implementing ErrorHandler:

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

However note that according to the documentation:

The default behavior of this message listener [...] will log any such exception at the error level. [...] However, if error handling is necessary, then any implementation of the ErrorHandler strategy may be provided to the setErrorHandler(ErrorHandler) method.

Check out your logs, maybe the exception is already logged?

like image 164
Tomasz Nurkiewicz Avatar answered Sep 19 '22 06:09

Tomasz Nurkiewicz


I like it short and sweet!

    @Bean JmsListenerContainerFactory<?> jmsContainerFactory(ConnectionFactory connectionFactory) {     SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();     factory.setConnectionFactory(connectionFactory);     factory.setErrorHandler(t -> {          log.error("Error in listener!", t);        });     return factory; } 
like image 20
BuckBazooka Avatar answered Sep 20 '22 06:09

BuckBazooka