SpringCloud微服務(wù)熔斷器Hystrix使用詳解
什么是Hystrix
在日常生活用電中,如果我們的電路中正確地安置了保險絲,那么在電壓異常升高時,保險絲就會熔斷以便切斷電流,從而起到保護電路安全運行的作用。
在貨船中,為了防止漏水和火災(zāi)的擴散,一般會將貨倉進行分割,避免了一個貨倉出事導(dǎo)致整艘船沉沒的悲劇,這就是艙壁保護機制。
Hystrix提供的熔斷器也類似,在調(diào)用某個服務(wù)提供者時,當一定時間內(nèi)請求總數(shù)超過配置的閾值,且窗口期內(nèi)錯誤率過高,那Hystrix就會對調(diào)用請求熔斷,后續(xù)的請求直接短路,進入降級邏輯,并執(zhí)行本地的降級策略。

同時Hystrix也將系統(tǒng)中的服務(wù)提供者隔離起來,一個服務(wù)提供者延遲過高或者失敗,并不會導(dǎo)致整個系統(tǒng)的失敗,同時也能夠控制調(diào)用這些服務(wù)的并發(fā)度。
總之,Hystrix 能使你的系統(tǒng)在出現(xiàn)依賴服務(wù)失效的時候,通過隔離系統(tǒng)所依賴的服務(wù),防止服務(wù)級聯(lián)失敗,同時提供失敗回退機制,更優(yōu)雅地應(yīng)對失效,并使你的系統(tǒng)能更快地從異常中恢復(fù)。
Hystrix實戰(zhàn)
接著我們上篇文章中的dms服務(wù),進行如下修改:
Feign 本身就支持Hystrix,不需要額外引入依賴。
1、首先修改調(diào)用方app服務(wù)的配置文件application.xml,開啟hystrix
feign:
hystrix:
enabled: true
2、增加服務(wù)熔斷處理類,實現(xiàn)DmsApi接口
@Component
public class DmsHystrixImpl implements DmsApi {
@Override
public String findNameByCode(String code) {
return "服務(wù)器故障";
}
}
3、修改接口類注解,增加熔斷處理類:fallback = DmsHystrixImpl.class;
(Spring Cloud Feign HTTP請求異常Fallback容錯機制,它是基于Hystrix實現(xiàn)的,所以要通過配置參數(shù)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、啟動項目,進行驗證,返回正確結(jié)果。

總結(jié)
在微服務(wù)架構(gòu)中,通常會有多個服務(wù)間相互調(diào)用,基礎(chǔ)服務(wù)的故障可能會導(dǎo)致級聯(lián)故障,進而造成整個系統(tǒng)不可用的情況,這種現(xiàn)象被稱為服務(wù)雪崩效應(yīng)。服務(wù)雪崩效應(yīng)是一種因“服務(wù)提供者”的不可用導(dǎo)致“服務(wù)消費者”的不可用,并將不可用逐漸放大的過程。
如:A作為服務(wù)提供者,B為A的服務(wù)消費者,C和D是B的服務(wù)消費者。A不可用引起了B的不可用,并將不可用像滾雪球一樣放大到C和D時,雪崩效應(yīng)就形成了。為了避免雪崩效應(yīng)的形成,就需要使用Hystrix。
到此這篇關(guān)于SpringCloud微服務(wù)熔斷器Hystrix使用詳解的文章就介紹到這了,更多相關(guān)SpringCloud Hystrix內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用ShardingSphere-Proxy實現(xiàn)分表分庫
這篇文章介紹了使用ShardingSphere-Proxy實現(xiàn)分表分庫的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02
使用Spring Cache和Redis實現(xiàn)查詢數(shù)據(jù)緩存
在現(xiàn)代應(yīng)用程序中,查詢緩存的使用已經(jīng)變得越來越普遍,它不僅能夠顯著提高系統(tǒng)的性能,還能提升用戶體驗,在這篇文章中,我們將探討緩存的基本概念、重要性以及如何使用Spring Cache和Redis實現(xiàn)查詢數(shù)據(jù)緩存,需要的朋友可以參考下2024-07-07
Java集合基礎(chǔ)知識 List/Set/Map詳解
這篇文章主要介紹了Java集合基礎(chǔ)知識 List/Set/Map,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
將List集合中的map對象轉(zhuǎn)為List<對象>形式實例代碼
這篇文章主要介紹了將List集合中的map對象轉(zhuǎn)為List<對象>形式實例代碼,具有一定借鑒價值,需要的朋友可以參考下2018-01-01

