Spring 集成 Java DSL:如果发生错误,如何将流路由到错误通道

Spring Integration Java DSL: How to route the flow to the error channel if there occurs an error

如果 Http.outboundGateway 调用发生错误,如何将流从通道 myChannel 路由到错误通道 myErrorChannel

@Bean
private IntegrationFlow myChannel() {
    return f -> f
            .handle(Http.outboundGateway("http://localhost:8080/greeting")
                    ...
                    .expectedResponseType(String.class));
}

@Bean
private IntegrationFlow myErrorChannel() {
    return f -> f
            ...
}

在错误处理程序中,我会将错误消息包装在我的自定义 JSON 中,并将其作为正常流程的一部分发送回源系统。

这是处理 Spring 集成 Java DSL 中错误的好方法吗?

您可以将 ExpressionEvaluatingRequestHandlerAdvice 与其 returnFailureExpressionResult = true 一起使用,并在 .handle(..., e -> e.advice(...)) 的第二个参数中使用它。

您为 onFailureExpression 配置该建议,以便能够 return 一些有意义的事情。如果你仍然认为你需要发送到频道并得到回复,那么你需要有一个 @MessagingGateway 并在那个 onFailureExpression 中使用它来发送和接收。 ExpressionEvaluatingRequestHandlerAdvice 中的正常 failureChannel 配置不需要回复。

另一种方法可以使用相同的 @MessagingGateway,但在 myChannel IntegrationFlow 之前。然后您可以为 errorChannel 配置该网关,这里需要错误流的回复。