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?