如果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中处理错误的好方法吗?
答案 0 :(得分:1)
您可以将ExpressionEvaluatingRequestHandlerAdvice
与returnFailureExpressionResult = true
一起使用,并在.handle(..., e -> e.advice(...))
的第二个参数中使用它。
您将onFailureExpression
的建议配置为能够返回有意义的内容。如果您仍然认为需要发送至频道并获得回复,则需要拥有@MessagingGateway
并在该onFailureExpression
中使用它来进行发送和接收。 failureChannel
中的常规ExpressionEvaluatingRequestHandlerAdvice
配置不会收到答复。
可以使用相同的@MessagingGateway
,但在该myChannel
IntegrationFlow
之前使用另一种方法。然后,您可以为errorChannel
配置该网关,并且在这里可以预期到错误流的答复。