有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

操作场景

服务治理功能包含服务鉴权、服务限流、服务路由和服务熔断,该任务指导您在应用开发过程中配置服务治理功能。

前提条件

在开始开发前,请确保您已经参见 下载 Maven 下载安装了 Java 和 Maven,并且配置了 TSF 私服地址。
说明
若要使用服务熔断功能,请确保 SDK 版本高于1.19。
不支持创建子线程进行调用后的服务治理。
已参见 服务治理 文档熟悉了服务治理功能。

添加依赖

向工程中添加 spring-cloud-tsf-starter 依赖并开启 @EnableTsf 注解。
注意
如果您使用的是 1.15.0-Edgware-RELEASE/1.15.0-Finchley-RELEASE 及之前的版本,使用方法参见 Spring Cloud SDK 历史版本使用方法
1. 向工程中添加依赖。 在 pom.xml 中添加以下代码:
<dependency>
<groupId>com.tencent.tsf</groupId>
<artifactId>spring-cloud-tsf-starter</artifactId>
<version><!-- 调整为 SDK 最新版本号 --></version>
</dependency>
spring-cloud-tsf-starter 中包含了服务注册发现、服务路由、服务鉴权、服务限流、服务熔断、服务容错、服务监控、分布式配置、调用链功能。 2. 向 Application 类中添加注解 @EnableTsf
// 下面省略了无关的代码
@SpringBootApplication
@EnableTsf
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}

服务鉴权

您需要在服务主调方和被调方都添加依赖项和注解的开启。此时您已经对服务开启了鉴权功能,任何到达服务的请求都会被鉴权,鉴权不通过时会返回 HTTP 403 Forbidden。
如果请求双方想使用基本 tag 的鉴权规则,那么:
对于 provider 而言,需要在控制台上设置 tag 鉴权规则。
对于 consumer 而言,需要在业务代码中设置 tag 的内容。
1. 控制台上配置鉴权规则,参见 服务鉴权基本操作
2. 在 consumer 中设置 tag ,使用org.springframework.tsf.core包中的TsfContext类。设置 Tag 的方法签名如下:
/**
* 设置多个 tag。如果有某个 tag 之前已经被设置过,那么它的值会被覆盖。
*/
public static void putTags(Map<String, String> tagMap, Tag.ControlFlag... flags) {}

/**
* 设置单个 tag。如果该 key 之前已经被设置过,那么它的值会被覆盖。
*/
public static void putTag(String key, String value, Tag.ControlFlag... flags) {}
其中 flags 决定 tag 的使用场景,如果您没有特殊需要,不传即可:
public enum ControlFlag {
TRANSITIVE, // 表示标签要传递下去,默认不启用。
NOT_IN_AUTH, // 表示标签不被使用在服务鉴权,默认是被使用的。
NOT_IN_ROUTE, // 表示标签不被使用在服务路由,默认是被使用的。
NOT_IN_SLEUTH // 表示标签不被使用在调用链,默认是被使用的。
}
TSF 提供的 Demo consumer-demo/src/main/java/com/tsf/demo/consumer/Controller.java 中提供了一个设置 tag 的例子:
@RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
public String rest(@PathVariable String str, @RequestParam String user) {
TsfContext.putTag("user", user);
return restTemplate.getForObject("http://provider-demo/echo/" + str, String.class);
}

服务限流

在应用工程中添加依赖和注解后,您可以直接在控制台上配置限流规则,参见 服务限流原理及使用
当您开启服务限流功能后,任何到达的请求都会被限流模块处理。如果该服务上的配额已经消耗完,会对请求返回 HTTP 429 Too Many Requests;否则会正常放行。

服务路由

在应用工程中添加依赖和注解后,您可以直接在控制台上配置路由规则,参见 服务路由使用方法

服务熔断

TSF 摒弃了已经不再继续维护的 Hystrix 断路器,采用官方推荐的 Resilience4J 作为底层实现。相比较原有单一的接口级别熔断,我们在此之上扩展成为:实例、API、服务级别熔断。同时,除了错误比率,TSF 也支持超时比率熔断,允许用户根据业务自行选择熔断配置。请配合 TSF 其他功能一起使用。
1. 关闭 Hystrix。 使用 TSF 熔断功能需要将 Hystrix 关闭(默认是关闭的,如果之前有打开还请关闭)。相关的容错功能请参见 服务容错
注意
如果您已经使用了 feign 的 fallback 或者 fallbackFactory 功能,此处将会不再生效。如果您需要继续使用该功能或需要使用更丰富的容错功能,请参见 服务容错 步骤3进行配置。
feign:
hystrix:
enabled: false
2. 进行熔断配置。 目前支持两种方式的熔断配置:
方式一:在线动态配置下发。 具体配置方法请参见 服务熔断使用方法
方式二:本地静态配置(适合本地联调使用,如果线上使用会被在线配置覆盖,请谨慎使用),配置在 yaml 配置文件中。
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}"