操作指南

API 文档

服务熔断

最近更新时间:2021-04-28 11:33:14

操作场景

TSF 摒弃了已经不再继续维护的 Hystrix 断路器,采用官方推荐的 Resilience4J 作为底层实现。相比较原有单一的接口级别熔断,我们在此之上扩展成为:实例、API、服务级别熔断。同时,除了错误比率,TSF 也支持超时比率熔断,允许用户根据业务自行选择熔断配置。请配合 TSF 其他功能一起使用。

前提条件

开始实践服务熔断功能前,请确保已完成了 SDK 下载,同时请确保 SDK 版本高于1.19

操作步骤

说明:

步骤1和步骤2与其他模块相同,已经使用过其他模块的可直接跳至步骤3。

  1. 向工程中添加依赖
    pom.xml 中添加以下代码:

    <dependency>
    <groupId>com.tencent.tsf</groupId>
    <artifactId>spring-cloud-tsf-starter</artifactId>
    <version><!-- 调整为 SDK 最新版本号 --></version> 
    </dependency>
  2. 向 Application 类中添加注解 @EnableTsf

    // 下面省略了无关的代码
    @SpringBootApplication
    @EnableTsf
    public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
    }
  3. 关闭 Hystrix
    使用 TSF 熔断功能需要将 Hystrix 关闭(默认是关闭的,如果之前有打开还请关闭)。相关的容错功能请参考 服务容错

注意:

如果您已经使用了 feign 的 fallback 或者 fallbackFactory 功能,此处将会不再生效。如果您需要继续使用该功能或需要使用更丰富的容错功能,请参考 服务容错 步骤3进行配置。

feign:
hystrix:
  enabled: false
  1. 进行熔断配置
    目前支持两种方式的熔断配置:
    • 方式一:在线动态配置下发。 具体配置方法请参考 服务熔断使用方法
    • 方式二:本地静态配置(适合本地联调使用,如果线上使用会被在线配置覆盖,请谨慎使用),配置在 yaml 配置文件中。各个字段详细含义请参考 服务熔断使用方法
      #此处为namespaceId,若为本地联调,则保持一致即可。
      #线上环境不需要此字段
      tsf_namespace_id: default_namespace

      tsf:
      circuit-breaker:
      # 可以配置多条规则
      rules:
      # 需要熔断的目标微服务名
      - targetServiceName: provider-demo
      # 熔断级别 API/SERVICE/INSTANCE
      isolationLevel: API
      # 目标熔断服务的namespaceId,如果本地联调,需与tsf_namespace_id保持一致
      targetNamespaceId: "default_namespace"
      # SERVICE和INSTANCE级别,只允许配置一个策略
      # API级别可以针对不同的API配置多个策略,也可以多个API配置一个策略
      strategyList:
      # 滑动窗口大小
      - slidingWindowSize: 10
      # 最小熔断请求数
      minimumNumberOfCalls: 10
      # 熔断错误比例
      failureRateThreshold: 60
      # 打开到半开状态的时间
      waitDurationInOpenState: 5
      # 最大熔断实例个数百分比
      # 只在INSTANCE级别生效
      maxEjectionPercent: 51
      # 慢请求阈值,单位为ms
      slowCallDurationThreshold: 60000
      # 慢请求熔断比例
      slowCallRateThreshold: 50
      # 该策略作用的API,可以同时作用于多个API
      apiList:
      - method: GET
      path: "/echo/{param}"
      - method: GET
      path: "/echo2/{str}"
目录