新建ape-cloud-hystix模块
增加依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.10.RELEASE</version>
</dependency>
</dependencies>
sku模块引入
<dependency>
<groupId>com.ssm</groupId>
<artifactId>ape-cloud-hystrix</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
新增测试方法
@GetMapping("testHystrix")
public String testHystrix() {
return "hello hystrix";
}
@GetMapping("testHystrixTimeOut")
public String testHystrixTimeOut() throws InterruptedException {
Thread.sleep(5000);
return "Hello hystrix timeOut!";
}
一个是正常的快速返回。
一个是睡了5s。
重启后,测试其中的返回结果是否正常。
在我们进行来回的两个接口的点击下,接口都是可以正常响应的。其实程序在等待5s也没有产生太大的问题。
高并发
在实际的工作中,如果说我们做的是C端的高并发请求。那么会产生什么情况呢?
我们通过apiPost进行压测的测试。设置并发数2000,持续时长300s。
再次请求可以快速返回的testHystrix接口,发现一直不返回数据。因为我们的项目的线程都被上一个耗尽了。资源已经无法进行倾斜。这是我们通过测试这个项目而言的。
如果我们通过的是feign的调用,那对于我们来说也是一样的,因为最终提供服务的还是我们的这sku服务。
再次演示通过feign来调用的形式查看。假设这个时候我们的home服务也是高并发,那就炸了。全部卡住。
于是,就有了hystrix的降级和限流。
什么情况需要降级?
- 超时不断等待
- 调用不断报错
基于此延伸出几种情况
如果sku服务超时,home服务不能一直等待,进行降级
如果sku服务挂了,home服务不能一直等待,进行降级
如果sku没事,home等不了,也降级。