Skip to content

retry client

chengyouling edited this page Mar 15, 2024 · 9 revisions

客户端重试

客户端调用服务端的时候,通常采用的是REST,服务端故障、网络故障等场景,可能导致短暂失败。 如果服务端存在多个实例,那么就可以通过转移请求的方式保证请求成功。

Spring Cloud Huawei的客户端重试可以用下图表示:

            请求
consumer ------REST----X---> provider(instance1)
                     --Y---> provider(instance2)
            响应
         <-------Y----------

配置重试策略

servicecomb:
  matchGroup:
    AllOperation: |
      matches:
        - apiPath:
            prefix: "/"
  retry:
    AllOperation: |
      maxAttempts: 3
      retryOnResponseStatus:
      - 502
      - 503
      waitDuration: 1

上述策略在consumer请求失败(响应的错误码502, 503)的情况下,会重试3次(不包括本次请求,即最多调用4次),重试的过程中, 会根据负载均衡策略尽可能重新选择一个新的实例,下一次重试等待时间为 waitDuration。

servicecomb:
  matchGroup:
    AllOperation: |
      matches:
        - apiPath:
            prefix: "/"
          serviceName: privder
  retry:
    AllOperation: |
      maxAttempts: 3
      retryOnSame: 1
      retryOnResponseStatus:
      - 502
      - 503
      waitDuration: 1

上述策略在consumer请求失败(响应的错误码502, 503)的情况下,会重试3次(不包括本次请求,即最多调用4次),第一次重试会使用请求发起 的时候的实例,下一次重试等待时间为 waitDuration,且第二次、第三次重试会根据负载均衡策略尽可能重新选择一个新的实例。

根据负载均衡策略选择新的实例,可能选择到请求发起的实例,具体取决于负载均衡策略和状态。

Spring Cloud Gateway

Spring Cloud Gateway可以使用上述重试策略和配置。

注意:1.11.6-2023.0.x/1.11.6-2022.0.x/1.11.6-2021.0.x版本才开始支持 retryOnSame 配置。

注意事项

指定服务名重试功能版本要求:1.10.9-2021.0.x及以上版本。

集成Spring Cloud Huawei以后,默认集成了客户端重试模块 spring-cloud-starter-huawei-governance,只需要通过配置开启具体的客户端重试策略。

Clone this wiki locally