#### 服务容错 Hystrix
- 场景举例
> 在微服务架构里,一个系统会有很多的服务,比如:订单服务在一个业务流程里需要调用三个服务。现在假设订单服务自己最多只有100个线程可以处理请求,然后呢,积分服务不幸的挂了,每次订单服务调用积分服务的时候,都会卡住几秒钟,然后抛出—个超时异常。
- 如下图所示,会造成服务雪崩
![](https://box.kancloud.cn/0f2f3b287d864edd4d088f808a1d239f_778x386.png)
> 这么多服务互相调用,要是不做任何保护的话,某一个服务挂了,就会引起连锁反应,导致别的服务也挂。比如积分服务挂了,会导致订单服务的线程全部卡在请求积分服务这里,没有一个线程可以工作,瞬间导致订单服务也挂了,其他服务请求订单服务全部会卡住,无法响应。
- 这时候可以用到Hystrix进行熔断降级处理,并且返回特定的数据给调用方
![](https://box.kancloud.cn/657395ef9fbfb371bf15aff5bed48bc8_751x134.png)
- ProductFeignClientHystrix.java 处理熔断的类
```
//降级服务
@Service
public class ProductFeignClientHystrix implements ProductFeignClient {
@Override
public List<Product> listProducts() {
List<Product> result = new ArrayList<>();
result.add(new Product(0, "产品服务不可用", 0));
return result;
}
}
```
- Hystrix默认超时时间是1000毫秒也就是1秒
> 源码 com.netflix.hystrix.HystrixCommandProperties
![](https://box.kancloud.cn/9eb5ee11c7cc521cac5ab0be86aeb9cf_740x120.png)
- 既然是1秒,那测试的时候,可以让其sleep(2000),看Hystrix是否有效
![](https://box.kancloud.cn/5f547b86443121a005854fe1d8d54359_468x179.png)
- 浏览器测试结果,熔断降级处理成功,返回友好界面以及响应处理
![](https://box.kancloud.cn/59eda7dd23a320fc6e9e8bf2ca41b132_961x185.png)
- 也可以自己手动设置超时时间
```
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 3000
```