Spring Integration Java DSL:处理错误/异常的策略?

时间:2017-06-13 11:56:35

标签: java spring spring-integration spring-integration-dsl

如何处理Java DSL流中的错误处理?

假设我有一个简单的流写入Rabbit(或数据库)。

@Bean
public IntegrationFlow setupRabbitFlow() {
    return IntegrationFlows.from(publishSubscribeChannel)
            .handle((p, h) -> rabbitPublishActivator.publishToRabbit(p))
            .get();
}

此类操作可能会因数据库问题或中间连接失败而导致错误。

如果在“publishToRabbit”步骤中发生某些异常,我如何增强对所采取的操作的流声明?

1 个答案:

答案 0 :(得分:1)

如果你谈论重试和类似问题,你应该看看RequestHandlerRetryAdvice

另一方面,.handle()有第二个参数 - endpoint configurer。您可以指定.advice()

.handle((GenericHandler<?>) (p, h) -> {
                    throw new RuntimeException("intentional");
                }, e -> e.advice(retryAdvice()))

    @Bean
    public RequestHandlerRetryAdvice retryAdvice() {
        RequestHandlerRetryAdvice requestHandlerRetryAdvice = new RequestHandlerRetryAdvice();
        requestHandlerRetryAdvice.setRecoveryCallback(new ErrorMessageSendingRecoverer(recoveryChannel()));
        return requestHandlerRetryAdvice;
    }