Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
481 views
in Technique[技术] by (71.8m points)

spring jms - 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.

question from:https://stackoverflow.com/questions/65830948/separate-errorhandlers-for-separate-jmslisteners

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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 "";

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...