有奖捉虫:行业应用 & 管理与支持文档专题 HOT

操作场景

TSF 摒弃了已经不再继续维护的 Hystrix 作为容错模块,在原有单一的 fallback 上新增了 failfast、failover 和 forking。请配合 TSF 其他功能一起使用。

前提条件

请确保您已经参见 下载 Maven 下载安装了 Java 和 Maven,并且配置了 TSF 私服地址。
说明
同时请确保 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. ?
使用 Feign 上的 fallback 以及 fallbackFactory 功能。
TSF 容错兼容 feign 的容错功能,如果需要使用 feign 的如下降级功能,则需要关闭 Hystrix 开关。
@FeignClient(name = "circuit-breaker-mock-service", fallbackFactory = HystrixClientFallbackFactory.class)
@FeignClient(name = "circuit-breaker-mock-service", fallback = FeignClientFallback.class)
关闭 Hystrix 开关(默认是关闭的,如果之前使用了该功能,可以删除该配置或者关闭):
feign:
hystrix:
enabled: false
打开 TSF 开关:
feign:
tsf:
enabled: true
4. 在代码中使用容错功能。
// 下面省略了无关的代码
@TsfFaultTolerance(strategy = TsfFaultToleranceStragety.FAIL_OVER, parallelism = 2, fallbackMethod = "doWorkFallback")
public void doWork() throws InterruptedException {
String response = providerDemoService.echo("1234");
LOG.info("consumer-demo auto test, response: [" + response + "]");
}
public void doWorkFallback() {
System.out.println("fallback");
}
// fallbackMethod可以加也可以不加,用户可以自行选择
@TsfFaultTolerance(strategy = TsfFaultToleranceStragety.FAIL_FAST)
public void doWork2() throws InterruptedException {
String response = providerDemoService.echo2("1234");
LOG.info("consumer-demo auto test, response: [" + response + "]");
}
?
可以看到,TSF 的容错使用起来非常方便,您只需在需要保护的方法上增加一个注解即可(需要该 Bean 被 Spring 所管理)。

容错策略说明

failfast、failover 和 forking 容错策略是可选择的配置:
容错策略
含义
支持配置
failfast
直接失败,对于没有幂等性的下游服务推荐 failfast
failover
请求错了之后会重试
重试次数 maxAttempts
forking
同时发送多个请求,需要用户配置并行度,例如同时发出两个请求,哪个先返回,就把这个结果返回回去。如果第一个请求是异常,则会等另一个请求,如果全部都异常,则返回异常。
并行度 parallelism
三种容错策略均支持 fallback 方法,要求入参类型和返回值类型与原方法相同。您可以选择是否添加某一策略
除了如上所述的基本功能外,TSF 还提供了选择容错异常的能力:
// 下面省略了无关的代码
@TsfFaultTolerance(strategy = TsfFaultToleranceStragety.FAIL_OVER, parallelism = 2, ignoreExceptions = {FeignException.class}, raisedExceptions = {RuntimeException.class, InterruptedException.class}, fallbackMethod = "doWorkFallback")
public void doWork() throws InterruptedException {
String response = providerDemoService.echo("1234");
LOG.info("consumer-demo auto test, response: [" + response + "]");
}
?
public void doWorkFallback() {
System.out.println("fallback");
}
用户如果设置了 ignoreExceptions,且当前异常是其中一个的子类的话,则不执行容错逻辑。
如果用户没有设置 ignoreExceptions,或当前异常不是 ignoreExceptions 的子类且满足如下条件则执行容错逻辑:
用户未设置 raisedExceptions,则执行容错逻辑。
用户设定了 raisedExceptions,且当前异常为用户设置的 raisedExceptions 其中一个的子类,则执行容错逻辑。


http://www.vxiaotou.com