SpringCloud的Hystrix簡(jiǎn)單介紹
Hystrix 介紹
Hystrix ,中文含義是豪豬,因其背上長(zhǎng)滿棘刺,從而擁有了自我保護(hù)的能力。
SpringCloud Hystrix
是Netflix開(kāi)源的一款容錯(cuò)框架,具備服務(wù)降級(jí),服務(wù)熔斷,依賴隔離,監(jiān)控(Hystrix Dashboard)等功能,同樣具有自我保護(hù)能力。為了實(shí)現(xiàn)容錯(cuò)和自我保護(hù)
服務(wù)雪崩
分布式系統(tǒng)環(huán)境下,服務(wù)間類似依賴非常常見(jiàn),一個(gè)業(yè)務(wù)調(diào)用通常依賴多個(gè)基礎(chǔ)服務(wù)。如下圖,對(duì)于同步調(diào)用,當(dāng)庫(kù)存服務(wù)不可用時(shí),商品服務(wù)請(qǐng)求線程被阻塞,當(dāng)有大批量請(qǐng)求調(diào)用庫(kù)存服務(wù)時(shí),最終可能導(dǎo)致整個(gè)商品服務(wù)資源耗盡,無(wú)法繼續(xù)對(duì)外提供服務(wù)。并且這種不可用可能沿請(qǐng)求調(diào)用鏈向上傳遞,這種現(xiàn)象被稱為雪崩效應(yīng)。
一個(gè)服務(wù)失敗,導(dǎo)致整條鏈路的服務(wù)都失敗的情形,我們稱之為服務(wù)雪崩
服務(wù)降級(jí)
一般是從整體負(fù)荷考慮。就是當(dāng)某個(gè)服務(wù)熔斷之后,服務(wù)器將不再被調(diào)用,此時(shí)客戶端可以自己準(zhǔn)備一個(gè)本地的fallback回調(diào),返回一個(gè)缺省值。
這樣做,雖然會(huì)出現(xiàn)局部的錯(cuò)誤,但可以避免因?yàn)橐粋€(gè)服務(wù)掛機(jī),而影響到整個(gè)架構(gòu)的穩(wěn)定性。
?通過(guò)服務(wù)降級(jí),能保證在某個(gè)或某些服務(wù)出問(wèn)題的時(shí)間,不會(huì)導(dǎo)致整個(gè)項(xiàng)目出現(xiàn)問(wèn)題,避免級(jí)聯(lián)故障,從而來(lái)提高分布式系統(tǒng)的彈性。
服務(wù)熔斷
Hystrix意為“斷路器”,就和我們生活中的保險(xiǎn)絲,開(kāi)關(guān)一個(gè)道理。
當(dāng)我們給整個(gè)服務(wù)配置了服務(wù)降級(jí)后,如果服務(wù)提供者發(fā)生了錯(cuò)誤后,就會(huì)調(diào)用降級(jí)后的方法來(lái)保證程序的運(yùn)行。
但是呢?有一個(gè)問(wèn)題,調(diào)用者并不知道它調(diào)用的這個(gè)服務(wù)出錯(cuò)了,就會(huì)在業(yè)務(wù)發(fā)生的時(shí)候一直調(diào)用,然后服務(wù)會(huì)一直報(bào)錯(cuò),然后去調(diào)用降級(jí)方法。好比下圖中:
Hystrix入門(mén)案例
添加如下依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
啟動(dòng)類上添加注解
@EnableHystrix
使用feign
請(qǐng)求數(shù)據(jù) ,加上注解@HystrixCommand(fallbackMethod="fallback")
fallback
是方法 在方法中保持傳參和返回值相同。
服務(wù)報(bào)錯(cuò)降級(jí)
// http://localhost:7001/consumer/test @HystrixCommand(fallbackMethod = "fallback") @GetMapping("/test") public String testFeign(String str) throws Exception { if ("y".equalsIgnoreCase(str)) { throw new Exception(); } return providerService.provider(str); } public String fallback(String str) { return "服務(wù)繁忙,請(qǐng)稍后重試!"; }
服務(wù)超時(shí)降級(jí)
// http://localhost:7001/consumer/timeout @HystrixCommand(fallbackMethod = "timeout",commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000") }) @GetMapping("/timeout") public String testTimeout(String str) throws Exception { Thread.sleep(5000); return providerService.provider(str); } public String timeout(String str) { return "請(qǐng)求時(shí)間超時(shí)"; }
到此這篇關(guān)于SpringCloud的Hystrix簡(jiǎn)單介紹的文章就介紹到這了,更多相關(guān)SpringCloud的Hystrix內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解SpringBoot中的index首頁(yè)的訪問(wèn)、自定義Favicon圖標(biāo)
這篇文章主要介紹了SpringBoot中的index首頁(yè)的訪問(wèn)、自定義Favicon圖標(biāo),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08java如何在項(xiàng)目中實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出功能
這篇文章主要介紹了java如何在項(xiàng)目中實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出功能的相關(guān)資料,EasyExcel是一個(gè)基于Apache?POI開(kāi)發(fā)的開(kāi)源Java庫(kù),用于簡(jiǎn)化Excel文件的讀寫(xiě)操作,文中將用法介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10JAVA 日常開(kāi)發(fā)中Websocket示例詳解
JAVA |日常開(kāi)發(fā)中Websocket詳解,WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,它在Web應(yīng)用中實(shí)現(xiàn)了客戶端與服務(wù)器之間的實(shí)時(shí)數(shù)據(jù)傳輸,本文將詳細(xì)介紹Java開(kāi)發(fā)中WebSocket的使用,包括基本概念、Java API、使用示例以及注意事項(xiàng),感興趣的朋友一起看看吧2024-12-12mybatis使用pagehelper插件過(guò)程詳解
這篇文章主要介紹了mybatis使用pagehelper插件過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12mybatis注解之@Mapper和@MapperScan的使用
這篇文章主要介紹了mybatis注解之@Mapper和@MapperScan的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10SpringBoot Actuator未授權(quán)訪問(wèn)漏洞修復(fù)詳解
這篇文章主要介紹了SpringBoot Actuator未授權(quán)訪問(wèn)漏洞修復(fù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08