一、什麼是Hystrix?
Hystrix叫做熔斷器也稱爲斷路器,微服務架構中的熔斷器就是當被調用方沒有響應時,調用方直接返回一個錯誤響應即可,而不是長時間的等待,這樣避免調用時因爲等待而現場一直得不到釋放,避免故障在分佈式系統間蔓延。
例如: 電商平臺中用戶下單,我們一個是訂單服務,一個是減庫存服務,當用戶下訂單時調用下訂單服務,然後下訂單服務又調用減庫存服務,如果減庫存服務響應延遲或者沒有響應,則會造成下訂單服務的線程掛起等待,如果大量的用戶請求下訂單,出現大量請求堆積,引起下訂單服務也不可用,或者下訂單服務還需要提供給其它服務來進行使用,這就造成了整個微服務出現癱瘓的情況。
二、Hystrix在項目中的使用
在入口類中使用@enableCircuitBreaker註解開啓斷路器功能,也可以使用 @SpringCloudApplication註解代替我們主類上的三個註解。
@HystrixCommand(fallbackMethod="error", commandProperties={
@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",
value="1500")}) //熔斷器,調用不通,回調 error()方法
fallbackMethod 整個參數就是制定服務不可用是回調的方法;
三、Hystrix的服務降級
有了服務的熔斷後,隨之就會有服務的降級,所謂服務的降級,就是當某個服務熔斷之後,服務端提供的服務將不再調用,此時有客戶端自己來準備一個本地的fallback回調,返回一個默認值來代表服務端的返回。
四、Hystrix的異常處理
我們在調用服務提供者時,我們自己也有可能會拋異常,默認情況下拋出的異常會自動進行服務降級,交給服務降級中的方法區處理;
public String error(Throwable throwable) {
System.out.println(throwable.getMessage());
return "error"; }
五、聲明式服務消費Feign
Feign是整合了 Ribbon和Hystrix兩個組件。這種整合猶如SpringBoot 對Spring 和SpringMVC的整合一樣。大大簡化服務調用的流程。
@EnableFeignClients 表示開啓對SpringCloud Feign的支持
@FeignClient註解來指定服務名稱,進而綁定服務,然後再通過SpringMVC中提供的註解來綁定服務提供者提供的接口
舉個例子:
@FeignClient("01-springcloud-service-provider")
public interface HelloService {
@RequestMapping("/service/hello")
public String hello();
}
這裏就相當於綁定了一個名叫01-springcloud-service-provider
屬性配置:
#配置服務的名稱
...
spring.application.name=05-springcloud-service-feign
...