#### 服务容错 Hystrix
- 场景举例
> 在微服务架构里,一个系统会有很多的服务,比如:订单服务在一个业务流程里需要调用三个服务。现在假设订单服务自己最多只有100个线程可以处理请求,然后呢,积分服务不幸的挂了,每次订单服务调用积分服务的时候,都会卡住几秒钟,然后抛出—个超时异常。
- 如下图所示,会造成服务雪崩

> 这么多服务互相调用,要是不做任何保护的话,某一个服务挂了,就会引起连锁反应,导致别的服务也挂。比如积分服务挂了,会导致订单服务的线程全部卡在请求积分服务这里,没有一个线程可以工作,瞬间导致订单服务也挂了,其他服务请求订单服务全部会卡住,无法响应。
- 这时候可以用到Hystrix进行熔断降级处理,并且返回特定的数据给调用方

- 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

- 既然是1秒,那测试的时候,可以让其sleep(2000),看Hystrix是否有效

- 浏览器测试结果,熔断降级处理成功,返回友好界面以及响应处理

- 也可以自己手动设置超时时间
```
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 3000
```