Kirill Fertikov
Kirill Fertikov

Reputation: 80

Separate ErrorHandlers for separate JmsListeners

Here is answered how to set an ErrorHandler for a whole JmsListenerContainerFactory.

But I need each JmsListener (DefaultMessageListenerContainer) to have its own ErrorHandler.

Just having a try-catch inside my listener would not fit, because it won't catch JMS transactions' failures (transaction is committed in Spring, outside of my listener).

I would like to collect such failures by a monitoring system.

I tried to use

JmsListenerEndpointRegistry
  .getListenerContainers()
  .forEach{ it.errorHandler = myErrorHandler }

But

  1. This is a bit tricky.
  2. Containers are registered later than JmsListener-annotated beans are handled by its BeanPostProcessor. So I struggle with choosing a moment to set error handlers.

Please advise something.

Upvotes: 0

Views: 128

Answers (1)

Artem Bilan
Artem Bilan

Reputation: 121272

The only way I see is to configure separate JmsListenerContainerFactory beans for all those different @JmsListener and their specific ErrorHandler. Each of those @JmsListener should refer to their own factory from this option:

/**
 * The bean name of the {@link org.springframework.jms.config.JmsListenerContainerFactory}
 * to use to create the message listener container responsible for serving this endpoint.
 * <p>If not specified, the default container factory is used, if any.
 */
String containerFactory() default "";

Upvotes: 1

Related Questions