什麼是Hystrix?
Hystrix是Netflix所創造的一個庫,這個庫實現了斷路器的功能。
爲什麼需要斷路器?
假設有3個服務,分別爲:A、B、C,其中A調用B,B調用C,即:A–>B–>C
當C不可用時,會導致調用鏈中的級聯失敗,發生雪崩效應,如下:
A——>B——>C
A——>B ——>C
A ——>B ——>C
加有刪除線爲服務不可用的狀態,可以看到:由於C不可用,導致了A和B都不可用了。這個時候就需要一個機制來避免這樣的狀態發生,當B發現C不可用的時候,將不再請求C服務,而是直接由默認操作來返回特點的值。
斷路器一般在消費者服務中使用,我們就在SpringCloud入門03—微服務-服務網關的基本使用的基礎上進行整改添加斷路器
1.添加pom依賴
<!--引入斷路器hystrix依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2.在啓動類上添加註解@EnableCircuitBreaker如圖
3.配置application.properties文件開啓斷路器添加如下配置
#打開hystrix配置
feign.hystrix.enabled=true
4.修改SpringCloud入門02—微服務-提供者與消費者中消費者1.4編寫Service代碼如下
//此類爲本接口的實現類
@FeignClient(name = "spring-cloud-Zuul",fallback = Myhystrix.class)//此值要與eureka中的名稱對應
public interface Test {
@GetMapping("/zuulCity/city/findAll")//此路徑也要與要訪問的接口相對應
String test();
}
並編寫實現類
@Service
public class Myhystrix implements Test {
@Override
public String test() {
return "調用備用服務或者返回相同結構的返回值";
}
}
5.作用分析
到這就基本配置完成了,當我們調用Test接口中的test方法時相對應的服務器出現問題,就會重新調用Test接口的實現類中的test方法,避免了因爲一個服務的的崩潰而造成雪崩的問題