SpringCloud微服務熔斷器Hystrix使用詳解
什麼是Hystrix
在日常生活用電中,如果我們的電路中正確地安置瞭保險絲,那麼在電壓異常升高時,保險絲就會熔斷以便切斷電流,從而起到保護電路安全運行的作用。
在貨船中,為瞭防止漏水和火災的擴散,一般會將貨倉進行分割,避免瞭一個貨倉出事導致整艘船沉沒的悲劇,這就是艙壁保護機制。
Hystrix提供的熔斷器也類似,在調用某個服務提供者時,當一定時間內請求總數超過配置的閾值,且窗口期內錯誤率過高,那Hystrix就會對調用請求熔斷,後續的請求直接短路,進入降級邏輯,並執行本地的降級策略。
同時Hystrix也將系統中的服務提供者隔離起來,一個服務提供者延遲過高或者失敗,並不會導致整個系統的失敗,同時也能夠控制調用這些服務的並發度。
總之,Hystrix 能使你的系統在出現依賴服務失效的時候,通過隔離系統所依賴的服務,防止服務級聯失敗,同時提供失敗回退機制,更優雅地應對失效,並使你的系統能更快地從異常中恢復。
Hystrix實戰
接著我們上篇文章中的dms服務,進行如下修改:
Feign 本身就支持Hystrix,不需要額外引入依賴。
1、首先修改調用方app服務的配置文件application.xml,開啟hystrix
feign:
hystrix:
enabled: true
2、增加服務熔斷處理類,實現DmsApi接口
@Component public class DmsHystrixImpl implements DmsApi { @Override public String findNameByCode(String code) { return "服務器故障"; } }
3、修改接口類註解,增加熔斷處理類:fallback = DmsHystrixImpl.class;
(Spring Cloud Feign HTTP請求異常Fallback容錯機制,它是基於Hystrix實現的,所以要通過配置參數feign.hystrix.enabled=true開啟該功能)
@FeignClient(value = "dms",fallback = DmsHystrixImpl.class) public interface DmsApi { @RequestMapping(value="/dict/[code]", method = RequestMethod.GET) public String findNameByCode(@PathVariable("code") String code); }
4、增加異常代碼,以便驗證
@RestController public class DmsController implements DmsApi { @Override public String findNameByCode(String code) { Integer.parseInt("a"); switch (code){ case "0" : return "男"; case "1" : return "女"; default: return "未知"; } } }
5、啟動項目,進行驗證,返回正確結果。
總結
在微服務架構中,通常會有多個服務間相互調用,基礎服務的故障可能會導致級聯故障,進而造成整個系統不可用的情況,這種現象被稱為服務雪崩效應。服務雪崩效應是一種因“服務提供者”的不可用導致“服務消費者”的不可用,並將不可用逐漸放大的過程。
如:A作為服務提供者,B為A的服務消費者,C和D是B的服務消費者。A不可用引起瞭B的不可用,並將不可用像滾雪球一樣放大到C和D時,雪崩效應就形成瞭。為瞭避免雪崩效應的形成,就需要使用Hystrix。
到此這篇關於SpringCloud微服務熔斷器Hystrix使用詳解的文章就介紹到這瞭,更多相關SpringCloud Hystrix內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 如何解決springcloud feign 首次調用100%失敗的問題
- Open-Feign整合hystrix降級熔斷實戰記錄
- SpringCloud @FeignClient參數的用法解析
- Spring Cloud Hystrix的基本用法大全
- Sentinel 整合SpringCloud的詳細教程