SpringCloud微服務(wù)熔斷器Hystrix使用詳解
什么是Hystrix
在日常生活用電中,如果我們的電路中正確地安置了保險(xiǎn)絲,那么在電壓異常升高時(shí),保險(xiǎn)絲就會(huì)熔斷以便切斷電流,從而起到保護(hù)電路安全運(yùn)行的作用。
在貨船中,為了防止漏水和火災(zāi)的擴(kuò)散,一般會(huì)將貨倉(cāng)進(jìn)行分割,避免了一個(gè)貨倉(cāng)出事導(dǎo)致整艘船沉沒(méi)的悲劇,這就是艙壁保護(hù)機(jī)制。
Hystrix提供的熔斷器也類似,在調(diào)用某個(gè)服務(wù)提供者時(shí),當(dāng)一定時(shí)間內(nèi)請(qǐng)求總數(shù)超過(guò)配置的閾值,且窗口期內(nèi)錯(cuò)誤率過(guò)高,那Hystrix就會(huì)對(duì)調(diào)用請(qǐng)求熔斷,后續(xù)的請(qǐng)求直接短路,進(jìn)入降級(jí)邏輯,并執(zhí)行本地的降級(jí)策略。
同時(shí)Hystrix也將系統(tǒng)中的服務(wù)提供者隔離起來(lái),一個(gè)服務(wù)提供者延遲過(guò)高或者失敗,并不會(huì)導(dǎo)致整個(gè)系統(tǒng)的失敗,同時(shí)也能夠控制調(diào)用這些服務(wù)的并發(fā)度。
總之,Hystrix 能使你的系統(tǒng)在出現(xiàn)依賴服務(wù)失效的時(shí)候,通過(guò)隔離系統(tǒng)所依賴的服務(wù),防止服務(wù)級(jí)聯(lián)失敗,同時(shí)提供失敗回退機(jī)制,更優(yōu)雅地應(yīng)對(duì)失效,并使你的系統(tǒng)能更快地從異常中恢復(fù)。
Hystrix實(shí)戰(zhàn)
接著我們上篇文章中的dms服務(wù),進(jìn)行如下修改:
Feign 本身就支持Hystrix,不需要額外引入依賴。
1、首先修改調(diào)用方app服務(wù)的配置文件application.xml,開(kāi)啟hystrix
feign:
hystrix:
enabled: true
2、增加服務(wù)熔斷處理類,實(shí)現(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請(qǐng)求異常Fallback容錯(cuò)機(jī)制,它是基于Hystrix實(shí)現(xiàn)的,所以要通過(guò)配置參數(shù)feign.hystrix.enabled=true開(kāi)啟該功能)
@FeignClient(value = "dms",fallback = DmsHystrixImpl.class) public interface DmsApi { @RequestMapping(value="/dict/[code]", method = RequestMethod.GET) public String findNameByCode(@PathVariable("code") String code); }
4、增加異常代碼,以便驗(yàn)證
@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、啟動(dòng)項(xiàng)目,進(jìn)行驗(yàn)證,返回正確結(jié)果。
總結(jié)
在微服務(wù)架構(gòu)中,通常會(huì)有多個(gè)服務(wù)間相互調(diào)用,基礎(chǔ)服務(wù)的故障可能會(huì)導(dǎo)致級(jí)聯(lián)故障,進(jìn)而造成整個(gè)系統(tǒng)不可用的情況,這種現(xiàn)象被稱為服務(wù)雪崩效應(yīng)。服務(wù)雪崩效應(yīng)是一種因“服務(wù)提供者”的不可用導(dǎo)致“服務(wù)消費(fèi)者”的不可用,并將不可用逐漸放大的過(guò)程。
如:A作為服務(wù)提供者,B為A的服務(wù)消費(fèi)者,C和D是B的服務(wù)消費(fèi)者。A不可用引起了B的不可用,并將不可用像滾雪球一樣放大到C和D時(shí),雪崩效應(yīng)就形成了。為了避免雪崩效應(yīng)的形成,就需要使用Hystrix。
到此這篇關(guān)于SpringCloud微服務(wù)熔斷器Hystrix使用詳解的文章就介紹到這了,更多相關(guān)SpringCloud Hystrix內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Spring Boot 正常啟動(dòng)后訪問(wèn)Controller提示404問(wèn)題
今天小編再次搭建Spring Boot項(xiàng)目的時(shí)候遇到訪問(wèn)Controller報(bào)404錯(cuò)誤,之前都很順利。到底怎么回事呢?下面小編給大家?guī)?lái)了解決Spring Boot 正常啟動(dòng)后訪問(wèn)Controller提示404問(wèn)題,感興趣的朋友一起看看吧2018-08-08SpringBoot實(shí)現(xiàn)接口冪等性的4種方案
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)接口冪等性的4種方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Java通過(guò)MyBatis框架對(duì)MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法
MyBatis框架由Java的JDBC API進(jìn)一步封裝而來(lái),在操作數(shù)據(jù)庫(kù)方面效果拔群,接下來(lái)我們就一起來(lái)看看Java通過(guò)MyBatis框架對(duì)MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法:2016-06-06Java合并兩個(gè)List后并去掉重復(fù)項(xiàng)的兩種做法
工作中很多時(shí)候需要用到合并兩個(gè)List并去除其中的重復(fù)內(nèi)容,這是一個(gè)很簡(jiǎn)單的操作,實(shí)現(xiàn)的方法也多種多樣,這篇文章主要給大家介紹了關(guān)于Java合并兩個(gè)List后并去掉重復(fù)項(xiàng)的兩種做法,需要的朋友可以參考下2023-10-10初學(xué)者易上手的SSH-struts2 01環(huán)境搭建(圖文教程)
下面小編就為大家?guī)?lái)一篇初學(xué)者易上手的SSH-struts2 01環(huán)境搭建(圖文教程)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10JAVA多線程Thread和Runnable的實(shí)現(xiàn)
java中實(shí)現(xiàn)多線程有兩種方法:一種是繼承Thread類,另一種是實(shí)現(xiàn)Runnable接口。2013-03-03小米Java程序員第二輪面試10個(gè)問(wèn)題 你是否會(huì)被刷掉?
小米Java程序員第二輪面試10個(gè)問(wèn)題,你是否會(huì)被刷掉?掌握好基礎(chǔ)知識(shí),祝大家面試順利2017-11-11Java利用MultipartFile實(shí)現(xiàn)上傳多份文件的代碼
這篇文章主要介紹了Java利用MultipartFile實(shí)現(xiàn)上傳多份文件的代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09