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?
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.
xml file with Spring Boot and ActiveMQ dependencies. Additionally, we will need Jackson for object to JSON conversion.
Add dependencies Add Spring Boot, ActiveMQ and Jackson (JSON convertor) dependencies in pom. xml .
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?
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; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With