Java 如何将Spring集成错误处理和RabbitMQ错误处理绑定到重新查询消息失败并跳过一些异常?
如何将Spring集成错误通道(错误处理)和RabbitMQ错误处理(listenerContainer的错误通道)绑定到重新查询消息失败,并跳过一些异常 我有一个基于Java 如何将Spring集成错误处理和RabbitMQ错误处理绑定到重新查询消息失败并跳过一些异常?,java,spring,groovy,rabbitmq,spring-integration,Java,Spring,Groovy,Rabbitmq,Spring Integration,如何将Spring集成错误通道(错误处理)和RabbitMQ错误处理(listenerContainer的错误通道)绑定到重新查询消息失败,并跳过一些异常 我有一个基于Spring的项目,它是在Groovy上编写的,使用RabbitMQ。 配置为: <int:service-activator id="GlobalErrorHandler" input-channel="errorChannel" ref="globalErrorHandler"/> <in
Spring
的项目,它是在Groovy
上编写的,使用RabbitMQ
。
配置为:
<int:service-activator id="GlobalErrorHandler" input-channel="errorChannel"
ref="globalErrorHandler"/>
<int-amqp:inbound-channel-adapter id="event-processing-inbound-rabbit-adapter"
channel="mli-forever-event-processing-channel"
error-channel="errorChannel"
mapped-request-headers="*"
listener-container="listenerContainer"/>
错误处理程序仅用于日志记录:
class GlobalErrorHandler extends AbstractFeedbackAware {
@ServiceActivator
void handleMessagingException( final MessagingException exception ) {
feedbackProvider.sendFeedback( CoreFeedbackContext.CONSUMING_EVENT_ERROR, exception.message )
}
}
如果我得到异常PersistenceException
消息不会重新发出,但它应该发出。
我在谷歌上搜索和阅读文档,但我不理解异常发生时的错误方式。如果将errorHandler
添加到containerListener
将调用哪些处理程序呢??二者都什么订单??
我在想那些东西:
new SimpleMessageListenerContainer( null ).with {
errorHandler = { it instanceof PersistenceException } as ConditionalRejectingErrorHandler
it
}
class ExceptionStrategyToAvoidPersistenceException extends ConditionalRejectingErrorHandler.DefaultExceptionStrategy {
@Override
boolean isFatal( final Throwable t ) {
super.isFatal( t ) && !( t instanceof PersistenceException )
}
}
但是我不明白为什么PersistenceException
不重新查询,因为它不在默认异常策略的致命错误列表中。
有人能帮我解决这个问题吗??还是解释一下??或者如何在集成测试中重现错误,因为我不能限制Docker
-容器中的DB(PostgreSQL
)空间
我将非常感激 首先调用
错误通道流;它必须重新抛出异常以使消息重新排队
new SimpleMessageListenerContainer( null ).with {
errorHandler = { it instanceof PersistenceException } as ConditionalRejectingErrorHandler
it
}
class ExceptionStrategyToAvoidPersistenceException extends ConditionalRejectingErrorHandler.DefaultExceptionStrategy {
@Override
boolean isFatal( final Throwable t ) {
super.isFatal( t ) && !( t instanceof PersistenceException )
}
}