更新时间:2024-12-25 GMT+08:00
分享

容错

容错的原理为:根据重试时间间隔的是否固定,分为固定间隔重试和指数间隔重试两种策略,默认重试策略为固定间隔重试。

  • 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>

    详细说明请参考流量特征治理

    此处以微服务开发框架Java Chassis 2.x版本为例介绍。3.x版本配置详情请参考流量特征治理

  • 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-EEROR-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设置的响应码是否满足条件。

  • Spring Cloud应用通过挂载Sermant的flowcontrol流控插件使用容错能力, 只需要通过配置开启具体的容错策略。

    配置项:servicecomb.retry.${scene名称}

    作用范围:自定义标签group:service=flowcontrol

    配置内容:

    # 访问接口时,当请求抛出500异常时进行重试,直到重试成功或者达到最大重试次数
    waitDuration: 2000            # 重试间隔时间
    retryStrategy: FixedInterval  # 固定间隔时间
    maxAttempts: 2
    retryOnResponseStatus:        # 定义错误码进行重试
      - 500

    容错规则的配置项由前缀servicecomb.retry和自定义场景名称${scene名称}组成,流量标记规则和容错规则的配置项的自定义场景名称需保持一致,才能对匹配的流量执行容错策略。

相关文档