如何处理Java DSL流中的错误处理?
假设我有一个简单的流写入Rabbit(或数据库)。
@Bean
public IntegrationFlow setupRabbitFlow() {
return IntegrationFlows.from(publishSubscribeChannel)
.handle((p, h) -> rabbitPublishActivator.publishToRabbit(p))
.get();
}
此类操作可能会因数据库问题或中间连接失败而导致错误。
如果在“publishToRabbit”步骤中发生某些异常,我如何增强对所采取的操作的流声明?
答案 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;
}