当 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
。
我是 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
。