開宗明義
在微服務(wù)架構(gòu)中,根據(jù)業(yè)務(wù)來拆分成一個個的服務(wù)芯咧,服務(wù)與服務(wù)之間可以相互調(diào)用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign來調(diào)用始腾。為了保證其高可用桶雀,單個服務(wù)通常會集群部署。由于網(wǎng)絡(luò)原因或者自身的原因改备,服務(wù)并不能保證100%可用控漠,如果單個服務(wù)出現(xiàn)問題,調(diào)用這個服務(wù)就會出現(xiàn)線程阻塞,此時若有大量的請求涌入盐捷,Servlet容器的線程資源會被消耗完畢偶翅,導(dǎo)致服務(wù)癱瘓。服務(wù)與服務(wù)之間的依賴性碉渡,故障會傳播聚谁,會對整個微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果,這就是服務(wù)故障的“雪崩”效應(yīng)
Netflix開源了Hystrix組件滞诺,實現(xiàn)了斷路器模式形导,SpringCloud對這一組件進行了整合。 在微服務(wù)架構(gòu)中习霹,一個請求需要調(diào)用多個服務(wù)是非常常見的
較底層的服務(wù)如果出現(xiàn)故障朵耕,會導(dǎo)致連鎖故障。當(dāng)對特定的服務(wù)的調(diào)用的不可用達到一個閥值(Hystric 是5秒20次) 斷路器將會被打開
斷路打開后淋叶,可用避免連鎖故障阎曹,fallback方法可以直接返回一個固定值
1 在ribbon中使用斷路器
1.1 在service-ribbon的pom.xml文件中添加hystrix的依賴
1.2 在啟動類ServiceRibbonApplication 加@EnableHystrix注解開啟Hystrix
1.3 改造HelloService類,在hiService方法上加上@HystrixCommand注解煞檩。該注解對該方法創(chuàng)建了熔斷器的功能处嫌,并指定了fallbackMethod熔斷方法,熔斷方法直接返回了一個字符串斟湃,字符串為”hi,”+name+”,sorry,error!”
1.4 關(guān)閉service-hi訪問localhost:8768/hi?name=Silent-Y熏迹,返回預(yù)期結(jié)果,說明當(dāng) service-hi 工程不可用的時候桐早,service-ribbon調(diào)用 service-hi的API接口時癣缅,會執(zhí)行快速失敗厨剪,直接返回一組字符串哄酝,而不是等待響應(yīng)超時,這很好的控制了容器的線程阻塞
2 在feign中使用斷路器
2.1 feign是自帶斷路器的祷膳,在D版本的Spring Cloud中陶衅,它沒有默認(rèn)打開,需要在配置文件中加入
feign.hystrix.=true
配置打開
2.2 基于service-feign工程進行改造直晨,需要在FeignClient的SchedualServiceHi接口的注解中加上fallback的指定類
2.2.1 SchedualServiceHiHystric需要實現(xiàn)SchedualServiceHi 接口搀军,并注入到Ioc容器中
2.3 訪問localhost:8769/hi?name=Silent-Y,返回預(yù)期結(jié)果
3 Hystrix Dashboard (斷路器:Hystrix 儀表盤)
ribbon與feign的改造相同勇皇,以下基于ribbon改造
3.1 pom.xml文件中添加以下依賴
3.2 啟動類中加入@EnableHystrixDashboard注解罩句,開啟hystrixDashboard
3.3 訪問localhost:8768/hystrix界面
3.4 點擊monitor stream,進入下一個界面
3.5 訪問localhost:8768/hi?name=Silent-Y出現(xiàn)監(jiān)控界面
未完待續(xù)......