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

Spring Integration Java DSL: strategy to handle errors / exceptions?

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

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

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

这样的操作可能会由于数据库问题或中间连接失败而导致错误。

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

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

另一方面,.handle() 有第二个参数——端点配置器。您可以指定 .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;
    }