#### 服務容錯 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
```