SpringCloud的Hystrix簡單介紹
Hystrix 介紹
Hystrix ,中文含義是豪豬,因其背上長滿棘刺,從而擁有了自我保護(hù)的能力。
SpringCloud Hystrix
是Netflix開源的一款容錯(cuò)框架,具備服務(wù)降級(jí),服務(wù)熔斷,依賴隔離,監(jiān)控(Hystrix Dashboard)等功能,同樣具有自我保護(hù)能力。為了實(shí)現(xiàn)容錯(cuò)和自我保護(hù)
服務(wù)雪崩
分布式系統(tǒng)環(huán)境下,服務(wù)間類似依賴非常常見,一個(gè)業(yè)務(wù)調(diào)用通常依賴多個(gè)基礎(chǔ)服務(wù)。如下圖,對于同步調(diào)用,當(dāng)庫存服務(wù)不可用時(shí),商品服務(wù)請求線程被阻塞,當(dāng)有大批量請求調(diào)用庫存服務(wù)時(shí),最終可能導(dǎo)致整個(gè)商品服務(wù)資源耗盡,無法繼續(xù)對外提供服務(wù)。并且這種不可用可能沿請求調(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)定性。
?通過服務(wù)降級(jí),能保證在某個(gè)或某些服務(wù)出問題的時(shí)間,不會(huì)導(dǎo)致整個(gè)項(xiàng)目出現(xiàn)問題,避免級(jí)聯(lián)故障,從而來提高分布式系統(tǒng)的彈性。
服務(wù)熔斷
Hystrix意為“斷路器”,就和我們生活中的保險(xiǎn)絲,開關(guān)一個(gè)道理。
當(dāng)我們給整個(gè)服務(wù)配置了服務(wù)降級(jí)后,如果服務(wù)提供者發(fā)生了錯(cuò)誤后,就會(huì)調(diào)用降級(jí)后的方法來保證程序的運(yùn)行。
但是呢?有一個(gè)問題,調(diào)用者并不知道它調(diào)用的這個(gè)服務(wù)出錯(cuò)了,就會(huì)在業(yè)務(wù)發(fā)生的時(shí)候一直調(diào)用,然后服務(wù)會(huì)一直報(bào)錯(cuò),然后去調(diào)用降級(jí)方法。好比下圖中:
Hystrix入門案例
添加如下依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
啟動(dòng)類上添加注解
@EnableHystrix
使用feign
請求數(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ù)繁忙,請稍后重試!"; }
服務(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 "請求時(shí)間超時(shí)"; }
到此這篇關(guān)于SpringCloud的Hystrix簡單介紹的文章就介紹到這了,更多相關(guān)SpringCloud的Hystrix內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解SpringBoot中的index首頁的訪問、自定義Favicon圖標(biāo)
這篇文章主要介紹了SpringBoot中的index首頁的訪問、自定義Favicon圖標(biāo),本文給大家介紹的非常詳細(xì),對大家的學(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開發(fā)的開源Java庫,用于簡化Excel文件的讀寫操作,文中將用法介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10mybatis注解之@Mapper和@MapperScan的使用
這篇文章主要介紹了mybatis注解之@Mapper和@MapperScan的使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10SpringBoot Actuator未授權(quán)訪問漏洞修復(fù)詳解
這篇文章主要介紹了SpringBoot Actuator未授權(quán)訪問漏洞修復(fù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08