Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将Spring集成错误处理和RabbitMQ错误处理绑定到重新查询消息失败并跳过一些异常?_Java_Spring_Groovy_Rabbitmq_Spring Integration - Fatal编程技术网

Java 如何将Spring集成错误处理和RabbitMQ错误处理绑定到重新查询消息失败并跳过一些异常?

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集成错误通道(错误处理)和RabbitMQ错误处理(listenerContainer的错误通道)绑定到重新查询消息失败,并跳过一些异常

我有一个基于
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 )
    }
}