Skip to content

retry client

chengyouling edited this page Dec 12, 2022 · 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

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

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

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

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

Spring Cloud Gateway

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

注意:当前版本不支持 retryOnSame 配置。 需要等待Spring Cloud Gateway社区版本支持传递上下文。

注意事项

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

Clone this wiki locally