6 SpringCloud中熔斷器:Hystrix

先理解幾個(gè)定義:
服務(wù)雪崩效應(yīng):是一種因服務(wù)提供者的不可用導(dǎo)致服務(wù)調(diào)用者的不可用,并將不可用逐漸放大的過(guò)程。
雪崩原因:

  1. 服務(wù)提供者不可用
  • a、硬件故障

    • 硬件損壞造成的服務(wù)器主機(jī)宕機(jī)
    • 網(wǎng)絡(luò)硬件故障造成的服務(wù)提供者的不可訪問
  • b、程序Bug

  • c、緩存擊穿:緩存應(yīng)用重啟, 所有緩存被清空時(shí),以及短時(shí)間內(nèi)大量緩存失效時(shí). 大量的緩存不命中, 使請(qǐng)求直擊后端,造成服務(wù)提供者超負(fù)荷運(yùn)行,引起服務(wù)不可用

  • d、用戶大量請(qǐng)求:在秒殺和大促開始前,如果準(zhǔn)備不充分,用戶發(fā)起大量請(qǐng)求造成服務(wù)提供者的不可用

解決方案,太多了,開濤大神的《億級(jí)流量》就有好多應(yīng)對(duì)策略。
還是回歸正傳用Hystrix去,
一般通過(guò) 超時(shí)機(jī)制, 熔斷器 和熔斷后的 降級(jí)方法 來(lái)實(shí)現(xiàn)。而Hystrix就一個(gè)可以預(yù)防服務(wù)雪崩,解決分布式系統(tǒng)交互時(shí)超時(shí)處理和容錯(cuò)的類庫(kù)。
這里就簡(jiǎn)單使用,在上面的Feign項(xiàng)目中再加一個(gè)模塊hystrix。
代碼就是復(fù)制feign模塊。
添加依賴

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix</artifactId>
    </dependency>

然后修改HelloService,加上一個(gè)fallback,當(dāng)服務(wù)不可用時(shí),調(diào)用ErrorHelloService,

@FeignClient(value = "service-hi",fallback = ErrorHelloService.class)

自定義一個(gè)ErrorHelloService類,繼承HelloService,上面要加上@Component,注入spring

@Component
public class ErrorHelloService implements HelloService {
    @Override
    public String callClientOne(String name) {
        return "sorry "+name;
    }
}

其他都一樣,然后運(yùn)行這個(gè)項(xiàng)目,注意,現(xiàn)在server,client都沒有起來(lái)
然后訪問 http://localhost:8765/hi?name=lijia
會(huì)輸出剛剛定義的ErrorHelloService的信息sorry lijia。這樣就實(shí)現(xiàn)了如果服務(wù)不可用也不會(huì)造成雪崩效應(yīng)。
然后啟動(dòng)server,client,再次訪問 http://localhost:8765/hi?name=lijia


上面是在Feign項(xiàng)目中加上Hystrix,在Ribbon中呢。

用的是Ribbon的項(xiàng)目,和上面一樣。加個(gè)hystrix模塊,代碼復(fù)制ribbon的。
添加依賴

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix</artifactId>
    </dependency>

修改啟動(dòng)類AppHystrix添加@EnableHystrix注解。
然后修改HelloService,在調(diào)用的方法上面加上@HystrixCommand(fallbackMethod = "hiError"),fallbackMethod中定義如果服務(wù)不可用的方法。


然后啟動(dòng)。效果在啟動(dòng)server和client前后是有區(qū)別的。

還有一個(gè)Hystrix Dashboard
在Ribbon項(xiàng)目的hystrix中加上依賴

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
    </dependency>

然后在啟動(dòng)類中加上@EnableHystrixDashboard


啟動(dòng)類,然后訪問 http://localhost:8764/hystrix
會(huì)進(jìn)入

輸入要調(diào)用的服務(wù),點(diǎn)擊Monitor Stream,進(jìn)入hystrix Monitor ,由于我的server和client未啟動(dòng),會(huì)出現(xiàn)

然后啟動(dòng)server,client,得等一會(huì),不到一分鐘,具體以后再看。
首先訪問 http://localhost:8764/hi?name=lijia

然后在hystrix dashboard中輸入 http://localhost:8764/hystrix.stream


進(jìn)去之后會(huì)發(fā)現(xiàn)一些監(jiān)控?cái)?shù)據(jù)

ribbon代碼放在 https://github.com/lijiaccy/springcloud-study/tree/master/eurefa-Ribbon
feign代碼放在 https://github.com/lijiaccy/springcloud-study/tree/master/eurefa-Feign

參考 http://blog.csdn.net/forezp/article/details/69934399

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • 我們這次主要講4件事: 1. 什么是微服務(wù)? 什么是 springcloud? 引用維基百科: 微服務(wù)是一種架構(gòu)風(fēng)...
    莫那一魯?shù)?/span>閱讀 2,817評(píng)論 0 3
  • (git上的源碼:https://gitee.com/rain7564/spring_microservices_...
    sprainkle閱讀 9,557評(píng)論 13 33
  • 原理 在微服務(wù)架構(gòu)中,服務(wù)之間形成調(diào)用鏈路,鏈路中的任何一個(gè)服務(wù)提供者都可能面臨著相應(yīng)超時(shí)、宕機(jī)等不可用的情況,在...
    billJiang閱讀 3,368評(píng)論 0 2
  • 今天和宇都宮文星女子高級(jí)中學(xué)進(jìn)行了交流,他們的合唱隊(duì)非常不錯(cuò),而且演奏部紀(jì)律十分嚴(yán)格,中午與同學(xué)們進(jìn)行了親切的交流...
    蔡皓天閱讀 352評(píng)論 0 0

友情鏈接更多精彩內(nèi)容