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

时间:2018-11-19 13:13:18

标签: spring-integration spring-integration-dsl

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

@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 Integration Java DSL中处理错误的好方法吗?

1 个答案:

答案 0 :(得分:1)

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

您将onFailureExpression的建议配置为能够返回有意义的内容。如果您仍然认为需要发送至频道并获得回复,则需要拥有@MessagingGateway并在该onFailureExpression中使用它来进行发送和接收。 failureChannel中的常规ExpressionEvaluatingRequestHandlerAdvice配置不会收到答复。

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