2

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

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

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

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

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

4

1 回答 1

2

如果你谈论重试和类似的,你应该看看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;
    }
于 2017-06-13T13:58:08.950 回答