
# 容错
容错的原理为：根据重试时间间隔的是否固定，分为固定间隔重试和指数间隔重试两种策略，默认重试策略为固定间隔重试。
- Java Chassis的容错作用于微服务消费者，需要微服务应用集成容错模块，启用**bizkeeper** 处理链。
  配置示例如下：
  ```
  servicecomb:
    handler:
      chain:
         Consumer:
          default: bizkeeper-consumer
  ```
  在POM中添加如下依赖：
  ```
  <dependency>
     <groupId>org.apache.servicecomb</groupId>
     <artifactId>handler-bizkeeper</artifactId>
     <version>${project.version}</version>
  </dependency>
  ```
  详细说明请参考[流量特征治理](https://servicecomb.apache.org/references/java-chassis/2.x/zh_CN/references-handlers/governance.html)。
  ![](https://support.huaweicloud.com/devg-servicestage/public_sys-resources/note_3.0-zh-cn.png)
  此处以微服务开发框架Java Chassis 2.x版本为例介绍。3.x版本配置详情请参考[流量特征治理](https://servicecomb.apache.org/references/java-chassis/zh_CN/references-handlers/rule-governance.html)。
  

- Spring Cloud通过Aspect拦截RequestMappingHandlerAdapter实现了容错，集成Spring Cloud Huawei以后，默认集成了客户端容错模块spring-cloud-starter-huawei-governance， 只需要通过配置开启具体的客户端容错策略。 配置示例如下：
  ```
  servicecomb:
    matchGroup:
      AllOperation: |
        matches:
          - apiPath:
              prefix: "/"
    retry:
      AllOperation: |
        maxAttempts: 3  # 重试次数
        retryOnSame: 1  # 重试请求发起的实例
        retryOnResponseStatus:  # 重试错误码
          - 502
          - 503
  ```
  默认策略是在异常错误码为502、503情况下生效，1.11.4-2021.0.x/1.11.4-2022.0.x版本开始支持响应头header的特殊场景生效。
  响应头header设置key默认为"X-HTTP-STATUS-CODE"，也支持自定义设置，配置如下：
  ```
  spring:
    cloud:
      servicecomb:
        governance:
          response:
            header:
              status:
                key: 'X-HTTP-ERROR-STATUS-CODE'
  ```
  同样响应头header中设置的响应码也支持自定义，但是需要在容错策略中增加对应的错误码，例如设置X-HTTP-STATUS-CODE=511，那么错误码中增加511错误码，配置如下：
  ```
  servicecomb:
    matchGroup:
      AllOperation: |
        matches:
          - apiPath:
              prefix: "/"
    retry:
      AllOperation: |
        maxAttempts: 3  # 重试次数
        retryOnSame: 1  # 重试请求发起的实例
        retryOnResponseStatus:  # 重试错误码
          - 502
          - 503
          - 511
  ```
  策略执行顺序为优先判断响应码，如果异常响应码满足策略设置，容错开启；响应码不满足后，再判断header设置的响应码是否满足条件。
  
 
