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;
}
如何处理 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;
}