springcloud之Hystrix
程序员文章站
2022-07-15 13:02:14
...
一、 概述
各个服务之间可以相互调用(rpc),服务之间具有依赖性,由于网络或自身的原因,当某个服务出现问题,该服务一定会出现请求超时,线程阻塞等问题,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。
Hystrix可以解决雪崩问题
1、资源隔离:包括线程池隔离和信号量隔离,限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用。
2、降级机制:超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据。
3、融断:当失败率达到阀值自动触发降级(如因网络故障/超时造成的失败率高),熔断器触发的快速失败会进行快速恢复。4、缓存:提供了请求缓存、请求合并实现。
二、 实现降级和熔断
maven依赖:(在实现了eureka和feign的基础上)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
配置文件:
#开启hystrix
feign:
hystrix:
enabled: true
#设置超时时间
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 4000
在前面的feign的文章中 创建了接口public interface OfficeFeign1();
此时新建一个回调的本地函数 FeignFallback 实现OfficeFeign1 接口。
@Component
public class FeignFallback implements OfficeFeign1 {
private static final Logger logger = LoggerFactory.getLogger(FeignFallback.class);
@Override
public List<String> getOrderByUserList() {
logger.info("/app/getUser1 连接超时或异常");
List<String> list = new ArrayList<String>();
list.add("服务发生异常");
return list;
}
修改OfficeFeign1 的注解即可
@FeignClient(value = "service-office",fallback = FeignFallback.class)//这里
public interface OfficeFeign1 {
@GetMapping("/app/getUser1")
List<String> getOrderByUserList();
}
当请求超时 或服务不可用时,会进行服务降级,调用本地的方法。
三、 经验总结
。。。
上一篇: Hystrix的Command初始化
下一篇: [kali]vim鼠标右键无法粘贴处理