2. Hystrix
1..1. Hystrix介绍
- 问题引入 : 多个微服务之间调用的时候,假如A调用B和C,B和C又调用其他的微服务,这就是所谓的"扇出"。如果扇出的链路上某个微服务的调用响应的时间过长或者不可用,对A的调用就会占用越来越多的系统资源,进而引起系统崩溃,即"雪崩效应"。
- Hystrix概念 : 用于处理分布式系统的延迟和容错,保证一个服务出现故障时,不会导致整个系统出现雪崩效应,同时作为“断路器”,在一个服务出现故障时,返回一个可以处理的响应结果,保证服务调用线程不会长时间被占用,避免故障蔓延。
- Hystrix作用
- 服务降级 : 服务出现故障时,给故障服务降级到事先准备好的故障处理结果
- 服务熔断 : 是应对服务雪崩的一种链路保护机制,当服务出现故障时,服务会进行降级,熔断该服务节点,迅速返回错误响应信息。当检测到服务访问正常时,恢复其链路节点。
-
2.Hystrix的使用
-
改造 service-edu 模块
2.1. 在 service 的 pom 中添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> <!--hystrix依赖,主要是用 @HystrixCommand --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <!--服务注册--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--服务调用--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2.2. 在配置文件中添加 hystrix 配置
#开启熔断机制 feign.hystrix.enabled=true # 设置hystrix超时时间,默认1000ms hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000
2.3. 在 service-edu 的 client 包里面创建熔断器的实现类
@Component public class VodFileDegradeFeignClient implements VodClient { @Override public R removeVideo(String videoId) { return R.error().message("time out"); } @Override public R removeVideoList(List videoIdList) { return R.error().message("time out"); } }
2.4. 修改 VodClient 接口的注解
@FeignClient(name = "service-vod", fallback = VodFileDegradeFeignClient.class) @Component public interface VodClient { @DeleteMapping(value = "/eduvod/vod/{videoId}") public R removeVideo(@PathVariable("videoId") String videoId); @DeleteMapping(value = "/eduvod/vod/delete-batch") public R removeVideoList(@RequestParam("videoIdList") List videoIdList); }