SpringCloud的Hystrix簡單介紹
Hystrix 介紹
Hystrix ,中文含義是豪豬,因其背上長滿棘刺,從而擁有了自我保護(hù)的能力。
SpringCloud Hystrix是Netflix開源的一款容錯框架,具備服務(wù)降級,服務(wù)熔斷,依賴隔離,監(jiān)控(Hystrix Dashboard)等功能,同樣具有自我保護(hù)能力。為了實現(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)用降級后的方法來保證程序的運行。
但是呢?有一個問題,調(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)文章希望大家以后多多支持腳本之家!

