(三)熔斷器Hystrix

Hystrix
  1. 斷路器機(jī)制
    斷路器很好理解, 當(dāng)Hystrix Command請求后端服務(wù)失敗數(shù)量超過一定比例(默認(rèn)50%), 斷路器會切換到開路狀態(tài)(Open)。這時(shí)所有請求會直接失敗而不會發(fā)送到后端服務(wù)摄杂。斷路器保持在開路狀態(tài)一段時(shí)間后(默認(rèn)5秒), 自動切換到半開路狀態(tài)(HALF-OPEN)愧沟。這時(shí)會判斷下一次請求的返回情況, 如果請求成功, 斷路器切回閉路狀態(tài)(CLOSED), 否則重新切換到開路狀態(tài)(OPEN)宗收。Hystrix的斷路器就像我們家庭電路中的保險(xiǎn)絲, 一旦后端服務(wù)不可用, 斷路器會直接切斷請求鏈, 避免發(fā)送大量無效請求影響系統(tǒng)吞吐量, 并且斷路器有自我檢測并恢復(fù)的能力。

  2. Fallback
    Fallback相當(dāng)于是降級操作。對于查詢操作, 我們可以實(shí)現(xiàn)一個(gè)fallback方法, 當(dāng)請求后端服務(wù)出現(xiàn)異常的時(shí)候, 可以使用fallback方法返回的值缕碎。fallback方法的返回值一般是設(shè)置的默認(rèn)值或者來自緩存善已。

  3. 資源隔離
    在Hystrix中, 主要通過線程池來實(shí)現(xiàn)資源隔離灼捂。通常在使用的時(shí)候我們會根據(jù)調(diào)用的遠(yuǎn)程服務(wù)劃分出多個(gè)線程池。例如調(diào)用產(chǎn)品服務(wù)的Command放入A線程池, 調(diào)用賬戶服務(wù)的Command放入B線程池换团。這樣做的主要優(yōu)點(diǎn)是運(yùn)行環(huán)境被隔離開了悉稠。這樣就算調(diào)用服務(wù)的代碼存在bug或者由于其他原因?qū)е伦约核诰€程池被耗盡時(shí), 不會對系統(tǒng)的其他服務(wù)造成影響。但是帶來的代價(jià)就是維護(hù)多個(gè)線程池會對系統(tǒng)帶來額外的性能開銷艘包。如果是對性能有嚴(yán)格要求而且確信自己調(diào)用服務(wù)的客戶端代碼不會出問題的話, 可以使用Hystrix的信號模式(Semaphores)來隔離資源的猛。

Feign Hystrix

上一篇我們使用了producer和consumers,熔斷器是只作用在服務(wù)調(diào)用端想虎,因此上一篇使用到的consumers我們可以直接拿來使用卦尊。因?yàn)镕eign中已經(jīng)依賴了Hystrix所以在maven配置上不用做任何改動。
(1)配置文件application.yml新增 feign.hystrix.enabled = true

server:
  port: 8091
spring:
  application:
    name: spring-cloud-consumers
eureka:
  server:
    enable-self-preservation: false #關(guān)閉eureka的自我保護(hù)舌厨,防止已被關(guān)停的節(jié)點(diǎn)也錯(cuò)誤的顯示在線
  client:
    register-with-eureka: true #否允許客戶端向Eureka 注冊表獲取信息岂却,服務(wù)器為設(shè)置為false,客戶端設(shè)置為true
    fetch-registry: true #是否允許向Eureka Server注冊信息 如果是服務(wù)器端,應(yīng)該設(shè)置為false
    service-url:
      defaultZone: http://peer1:8761/eureka/ #此eureka server的應(yīng)用注冊地址
feign:
  hystrix:
    enabled: true

(2)創(chuàng)建fallback類,繼承HelloRemote實(shí)現(xiàn)回調(diào)的方法躏哩。

//fallback指定的類必須實(shí)現(xiàn)@FeignClient標(biāo)記的接口署浩。
@Component
public class HelloRemoteFallback implements HelloRemote {

    @Override
    public String hello(@RequestParam(value = "name") String name) {
        return "hello " + name + ",i am fallback message";
    }
}

(3)添加fallback屬性

//在HelloRemote類添加指定fallback類扫尺,在服務(wù)熔斷的時(shí)候返回fallback類中的內(nèi)容
@FeignClient(name= "spring-cloud-producer",fallback = HelloRemoteFallback.class)
public interface HelloRemote {
    @RequestMapping(value = "/hello")
    String hello(@RequestParam(value = "name") String name);
}

(4)測試
依次啟動注冊中心Eureka筋栋、producer、consumer正驻,訪問http://localhost:8091/hello?name=1弊攘,可以看到hello 1,producer is ready姑曙。關(guān)閉producer肴颊,再次訪問http://localhost:8091/hello?name=1,就會看到fallback提供的內(nèi)容渣磷。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末婿着,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子醋界,更是在濱河造成了極大的恐慌竟宋,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件形纺,死亡現(xiàn)場離奇詭異丘侠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)逐样,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門蜗字,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脂新,你說我怎么就攤上這事挪捕。” “怎么了争便?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵级零,是天一觀的道長。 經(jīng)常有香客問我滞乙,道長奏纪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任斩启,我火速辦了婚禮序调,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兔簇。我一直安慰自己发绢,他們只是感情好荣挨,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著朴摊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪此虑。 梳的紋絲不亂的頭發(fā)上甚纲,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機(jī)與錄音朦前,去河邊找鬼介杆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛韭寸,可吹牛的內(nèi)容都是我干的春哨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼恩伺,長吁一口氣:“原來是場噩夢啊……” “哼赴背!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晶渠,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凰荚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后褒脯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體便瑟,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年番川,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了到涂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颁督,死狀恐怖践啄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沉御,我是刑警寧澤往核,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站嚷节,受9級特大地震影響聂儒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜硫痰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一衩婚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧效斑,春花似錦非春、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽护侮。三九已至,卻和暖如春储耐,著一層夾襖步出監(jiān)牢的瞬間羊初,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工什湘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留长赞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓闽撤,卻偏偏與公主長得像得哆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子哟旗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 工程:D:\springcloud\eureka-consumer-hystrix 目標(biāo) Hystrix特性 Fe...
    wqjcarnation閱讀 367評論 0 0
  • 雪崩效應(yīng) 在微服務(wù)架構(gòu)中通常會有多個(gè)服務(wù)層調(diào)用贩据,基礎(chǔ)服務(wù)的故障可能會導(dǎo)致級聯(lián)故障,進(jìn)而造成整個(gè)系統(tǒng)不可用的情況闸餐,這...
    one_little_boy閱讀 455評論 0 1
  • 熔斷器 雪崩效應(yīng) 在微服務(wù)架構(gòu)中通常會有多個(gè)服務(wù)層調(diào)用乐设,基礎(chǔ)服務(wù)的故障可能會導(dǎo)致級聯(lián)故障,進(jìn)而造成整個(gè)系統(tǒng)不可用的...
    滔滔逐浪閱讀 397評論 0 10
  • 熔斷器 雪崩效應(yīng) 在微服務(wù)架構(gòu)中通常會有多個(gè)服務(wù)層調(diào)用绎巨,基礎(chǔ)服務(wù)的故障可能會導(dǎo)致級聯(lián)故障近尚,進(jìn)而造成整個(gè)系統(tǒng)不可用的...
    Java大生閱讀 1,710評論 0 9
  • 序言 上一章節(jié)我們已經(jīng)學(xué)習(xí)了最基本的Feign服務(wù)的提供者與消費(fèi)者,本章主要想和大家分享下SpringCloud的...
    山姆極客閱讀 495評論 0 0