当 HTTP 响应状态不是 200 时执行操作

Taking an action when HTTP response status is not 200

我是 Spring 集成的新手。我有一个简单的流程,可以多次尝试向外部资源发送请求。

IntegrationFlows.from(MY_CHANNEL)
    .handle(myOutboundGateway, e -> e.advice(myRetryAdvice))
    .wireTap(logResponse())
    .get();

我需要做的是在调用外部资源(重试后)不成功(http 状态代码不是 200 OK)时采取一些措施(将数据保存到数据库)。我怎样才能在我的流程中实现这一目标?

当所有重试尝试都用完时,调用RecoveryCallback。 在此处查看一些示例:。在那个 RecoveryCallback 中,您可以 return null 并将消息发送到某个通道以存储到数据库逻辑。

另一种方法是在重试的基础上提供额外的建议,而不是 RecoveryCallback。请参阅其文档:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#expression-advice。这样,当所有尝试都完成后,异常将被 ExpressionEvaluatingRequestHandlerAdvice 及其 failureChannel 冒泡并捕获。注意 trapException = true,因此错误不会返回到流程中。仅针对您的数据库逻辑 failureChannel