teoria example ejemplo crear cola adaptador java spring jms spring-jms

java - example - jms service



La ejecución de la escucha de mensajes JMS ha fallado y no se ha establecido ningún ErrorHandler (4)

En caso de que cuando se utiliza la fábrica por defecto:

@Bean public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory, SomeHandler errorHandler) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setErrorHandler(errorHandler); return factory; }

Cuando uso Spring para escuchar mensajes JMS, recibí el error anterior.

Me pregunto cómo agregar un Errorhandler en el oyente JMS.


Me gusta corto y dulce!

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


Sin la configuración xml. Hice lo siguiente en el ApplicationContext.

@Bean JmsListenerContainerFactory<?> jmsContainerFactory(ConnectionFactory connectionFactory, SomeHandler errorHandler) { SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setErrorHandler(errorHandler); return factory; } // From Tomasz answer @Service public class SomeHandler implements ErrorHandler { @Override public void handleError(Throwable t) { log.error("Error in listener", t); } }


Hay una propiedad en 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>

Donde someHandler es un bean que implementa ErrorHandler :

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

Sin embargo, tenga en cuenta que de acuerdo con la AbstractMessageListenerContainer :

El comportamiento predeterminado de esta escucha de mensajes [...] registrará cualquier excepción de este tipo en el nivel de error . [...] Sin embargo, si el manejo de errores es necesario, cualquier implementación de la estrategia ErrorHandler puede proporcionarse al método setErrorHandler (ErrorHandler).

Echa un vistazo a sus registros, tal vez la excepción ya está registrada?