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
配置该网关,这里需要错误流的回复。
如果 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
配置该网关,这里需要错误流的回复。