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