一起来学Spring Cloud | 第五章:熔断器 ( Hystrix)
在微服務(wù)項(xiàng)目中,一個(gè)系統(tǒng)可以分割成很多個(gè)不同的服務(wù)模塊,不同模塊之間我們通常需要進(jìn)行相互調(diào)用。springcloud中可以使用RestTemplate+Ribbon和Feign來(lái)調(diào)用(工作中基本都是使用feign)。有時(shí)為了提高系統(tǒng)的健壯性,某些訪問(wèn)量大的服務(wù)模塊還會(huì)做集群部署。但是服務(wù)之間的調(diào)用不可能百分之百成功的,如果出現(xiàn)超時(shí)、異常會(huì)導(dǎo)致服務(wù)無(wú)法提供功能。這時(shí)如果有大量請(qǐng)求訪問(wèn)異常服務(wù),就會(huì)造成系統(tǒng)資源耗盡,導(dǎo)致服務(wù)癱瘓。服務(wù)與服務(wù)之間的依賴性,故障會(huì)傳播,會(huì)對(duì)整個(gè)微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果,這就是服務(wù)故障的“雪崩”效應(yīng)。在實(shí)際工作中,復(fù)雜的系統(tǒng)往往有成百上千個(gè)服務(wù)模塊,某個(gè)功能模塊出現(xiàn)異常,不能影響其它功能的正常運(yùn)行,所以熔斷器Hystrix就派上用場(chǎng)了。
一、Hystrix簡(jiǎn)介:
Hystrix由Netfilix API團(tuán)隊(duì)研發(fā)于2011年,2012年開(kāi)始在Hystrix公司內(nèi)部推廣和使用,Hystrix在Netflix中久經(jīng)沙場(chǎng),現(xiàn)在已經(jīng)是一個(gè)非常成熟的系統(tǒng),而最近流行的微服務(wù)架構(gòu)和Spring Cloud,讓Hystrix成為了配套的基礎(chǔ)設(shè)施,在國(guó)內(nèi)也逐漸流行起來(lái)。
hystrix的出現(xiàn)即為解決服務(wù)雪崩效應(yīng),它通過(guò)四個(gè)方面的機(jī)制來(lái)解決這個(gè)問(wèn)題
1. 隔離(線程池隔離和信號(hào)量隔離):限制調(diào)用分布式服務(wù)的資源使用,某一個(gè)調(diào)用的服務(wù)出現(xiàn)問(wèn)題不會(huì)影響其他服務(wù)調(diào)用。
2. 降級(jí):超時(shí)降級(jí)、資源不足時(shí)(線程或信號(hào)量)降級(jí),降級(jí)后可以配合降級(jí)接口返回托底數(shù)據(jù)。
3. 熔斷:當(dāng)失敗率達(dá)到閥值自動(dòng)觸發(fā)降級(jí)(如因網(wǎng)絡(luò)故障/超時(shí)造成的失敗率高),熔斷器觸發(fā)的快速失敗會(huì)進(jìn)行快速恢復(fù)。
4. 緩存:提供了請(qǐng)求緩存、請(qǐng)求合并實(shí)現(xiàn)。
如果想要了解更多的Hystrix的底層及實(shí)現(xiàn)原理,可以參考相關(guān)文章學(xué)習(xí),本系列主要講解如何快速在工作中使用Hystrix。
二、環(huán)境準(zhǔn)備:
最終目錄結(jié)構(gòu):
?
本系列文章,都是層層遞進(jìn)的,本章內(nèi)容在前面搭建好的項(xiàng)目框架上進(jìn)行開(kāi)發(fā)講解,對(duì)搭建springcloud的多模塊子項(xiàng)目框架不清楚的同學(xué)可以參考 :一起來(lái)學(xué)Spring Cloud | 第一章 :如何搭建一個(gè)多模塊的springcloud項(xiàng)目?
工作中,我們基本上都是使用feign進(jìn)行服務(wù)調(diào)用的,所以本章只講解Feign中使用斷路器,對(duì)上一章feign工程搭建有興趣的可以參考:一起來(lái)學(xué)Spring Cloud | 第四章:服務(wù)消費(fèi)者 ( Feign )
三、Feign中使用斷路器:
1.?在上章的springcloud-feign-client工程的application.properties配置文件中,加入配置:feign.hystrix.enabled=true
server.port=9600 spring.application.name=springcloud-feign-client eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ feign.hystrix.enabled=true2. 在上章的springcloud-feign-client工程中,新增一個(gè)FeignRemoteService類的實(shí)現(xiàn)類,命名為:HystrixFeignRemoteCallBack,做為出現(xiàn)接口異常時(shí)的回調(diào)方法
package com.haly.romote.hystrix;import org.springframework.stereotype.Component;import com.haly.romote.FeignRemoteService;@Component public class HystrixFeignRemoteCallBack implements FeignRemoteService{@Overridepublic String hello(String name) {// TODO Auto-generated method stubreturn name + ",Due error,enter Hystrix";}}3. 在上章的springcloud-feign-client工程中,新增一個(gè)FeignRemoteService類中加入回調(diào)實(shí)現(xiàn)類的注解配置
package com.haly.romote;import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam;import com.haly.romote.hystrix.HystrixFeignRemoteCallBack;@FeignClient(value = "springcloud-eureka-client",fallback = HystrixFeignRemoteCallBack.class) public interface FeignRemoteService {@RequestMapping(value = "/hello",method = RequestMethod.GET)public String hello(@RequestParam(value = "name") String name);}4. 運(yùn)行項(xiàng)目
① 先啟動(dòng)springcloud-eureka-server模塊,開(kāi)啟eureka注冊(cè)中心
② 啟動(dòng)springcloud-eureka-client模塊,開(kāi)啟提供遠(yuǎn)程服務(wù)功能,并且提供接口能力 /hello
③ 啟動(dòng)springcloud-feign-client模塊,開(kāi)啟消費(fèi)模塊,用來(lái)調(diào)用springcloud-eureka-client模塊中的/hello接口
Eureka上的注冊(cè)信息,如下圖:
打開(kāi)瀏覽器,輸入網(wǎng)址:http://localhost:9600/getHello?name=young碼農(nóng),運(yùn)行結(jié)果如下:
我們模仿生產(chǎn)環(huán)境,服務(wù)提供者宕機(jī)(或者返回超時(shí)),這里我們手動(dòng)停掉springcloud-eureka-client服務(wù)
輸入網(wǎng)址:http://localhost:9600/getHello?name=young碼農(nóng)
本章我們只是在回調(diào)接口中,返回一個(gè)字符串,工作中,有些場(chǎng)景會(huì)做一些業(yè)務(wù)邏輯處理(比如調(diào)用短信發(fā)送接口,出現(xiàn)異常會(huì)在記錄一條異常日志,后面來(lái)處理這些異常)。
工作中我們會(huì)遇到很多特殊場(chǎng)景,特別在訪問(wèn)量過(guò)大,業(yè)務(wù)較復(fù)雜的時(shí)候,會(huì)出現(xiàn)一些奇奇怪怪的問(wèn)題,所以Feign,Hystrix有許多配置項(xiàng)可以使用,我們可以根據(jù)相應(yīng)業(yè)務(wù)配進(jìn)行合理配置
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/haly/p/10905469.html
總結(jié)
以上是生活随笔為你收集整理的一起来学Spring Cloud | 第五章:熔断器 ( Hystrix)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: bios密码忘记怎么放电 忘记BIOS密
- 下一篇: Silverlight与JavaScri