服务熔断
最近更新时间: 2024-10-17 17:10:00
操作场景
TSF 摒弃了已经不再继续维护的 Hystrix 断路器,采用官方推荐的 Resilience4J 作为底层实现。相比较原有单一的接口级别熔断,我们在此之上扩展成为:实例、API、服务级别熔断。同时,除了错误比率,TSF 也支持超时比率熔断,允许用户根据业务自行选择熔断配置。请配合 TSF 其他功能一起使用。
前提条件
开始实践服务熔断功能前,请确保已完成了 [SDK 下载] ,同时请确保 SDK 版本高于1.19。
操作步骤
注意:
步骤1和步骤2与其他模块相同,已经使用过其他模块的可直接跳至步骤3。
- 向工程中添加依赖。
在
pom.xml
中添加以下代码:
<dependency>
<groupId>com.tencent.tsf</groupId>
<artifactId>spring-cloud-tsf-starter</artifactId>
<version><!-- 调整为 SDK 最新版本号 --></version>
</dependency>
- 向 Application 类中添加注解
@EnableTsf
:
// 下面省略了无关的代码
@SpringBootApplication
@EnableTsf
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
- 关闭 Hystrix。 使用 TSF 熔断功能需要将 Hystrix 关闭(默认是关闭的,如果之前有打开还请关闭)。
注意:
如果您已经使用了 feign 的 fallback 或者 fallbackFactory 功能,此处将会不再生效。如果您需要继续使用该功能或需要使用更丰富的容错功能,请参考 【服务容错】 步骤3进行配置。
feign:
hystrix:
enabled: false
- 进行熔断配置。 目前支持两种方式的熔断配置:
方式一:在线动态配置下发。
方式二:本地静态配置(适合本地联调使用,如果线上使用会被在线配置覆盖,请谨慎使用),配置在 yaml 配置文件中。
#此处为namespaceId,若为本地联调,则保持一致即可。
#线上环境不需要此字段
tsf_namespace_id: default_namespace</dx-codeblock>
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}"