亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springcloud 熔斷器Hystrix的具體使用

 更新時(shí)間:2018年02月01日 11:15:08   作者:純潔的微笑  
本篇文章主要介紹了springcloud 熔斷器Hystrix的具體使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

說(shuō)起springcloud熔斷讓我想起了去年股市中的熔斷,多次痛的領(lǐng)悟,隨意實(shí)施的熔斷對(duì)整個(gè)系統(tǒng)的影響是災(zāi)難性的,好了接下來(lái)我們還是說(shuō)正事。

熔斷器

雪崩效應(yīng)

在微服務(wù)架構(gòu)中通常會(huì)有多個(gè)服務(wù)層調(diào)用,基礎(chǔ)服務(wù)的故障可能會(huì)導(dǎo)致級(jí)聯(lián)故障,進(jìn)而造成整個(gè)系統(tǒng)不可用的情況,這種現(xiàn)象被稱為服務(wù)雪崩效應(yīng)。服務(wù)雪崩效應(yīng)是一種因“服務(wù)提供者”的不可用導(dǎo)致“服務(wù)消費(fèi)者”的不可用,并將不可用逐漸放大的過(guò)程。

如果下圖所示:A作為服務(wù)提供者,B為A的服務(wù)消費(fèi)者,C和D是B的服務(wù)消費(fèi)者。A不可用引起了B的不可用,并將不可用像滾雪球一樣放大到C和D時(shí),雪崩效應(yīng)就形成了。

熔斷器(CircuitBreaker)

熔斷器的原理很簡(jiǎn)單,如同電力過(guò)載保護(hù)器。它可以實(shí)現(xiàn)快速失敗,如果它在一段時(shí)間內(nèi)偵測(cè)到許多類似的錯(cuò)誤,會(huì)強(qiáng)迫其以后的多個(gè)調(diào)用快速失敗,不再訪問(wèn)遠(yuǎn)程服務(wù)器,從而防止應(yīng)用程序不斷地嘗試執(zhí)行可能會(huì)失敗的操作,使得應(yīng)用程序繼續(xù)執(zhí)行而不用等待修正錯(cuò)誤,或者浪費(fèi)CPU時(shí)間去等到長(zhǎng)時(shí)間的超時(shí)產(chǎn)生。熔斷器也可以使應(yīng)用程序能夠診斷錯(cuò)誤是否已經(jīng)修正,如果已經(jīng)修正,應(yīng)用程序會(huì)再次嘗試調(diào)用操作。

熔斷器模式就像是那些容易導(dǎo)致錯(cuò)誤的操作的一種代理。這種代理能夠記錄最近調(diào)用發(fā)生錯(cuò)誤的次數(shù),然后決定使用允許操作繼續(xù),或者立即返回錯(cuò)誤。

熔斷器開(kāi)關(guān)相互轉(zhuǎn)換的邏輯如下圖:

熔斷器就是保護(hù)服務(wù)高可用的最后一道防線。

Hystrix特性

1.斷路器機(jī)制

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

2.Fallback

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

3.資源隔離

在Hystrix中, 主要通過(guò)線程池來(lái)實(shí)現(xiàn)資源隔離. 通常在使用的時(shí)候我們會(huì)根據(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)境被隔離開(kāi)了. 這樣就算調(diào)用服務(wù)的代碼存在bug或者由于其他原因?qū)е伦约核诰€程池被耗盡時(shí), 不會(huì)對(duì)系統(tǒng)的其他服務(wù)造成影響. 但是帶來(lái)的代價(jià)就是維護(hù)多個(gè)線程池會(huì)對(duì)系統(tǒng)帶來(lái)額外的性能開(kāi)銷. 如果是對(duì)性能有嚴(yán)格要求而且確信自己調(diào)用服務(wù)的客戶端代碼不會(huì)出問(wèn)題的話, 可以使用Hystrix的信號(hào)模式(Semaphores)來(lái)隔離資源.

Feign Hystrix

因?yàn)槿蹟嘀皇亲饔迷诜?wù)調(diào)用這一端,因此我們根據(jù)上一篇的示例代碼只需要改動(dòng)spring-cloud-consumer項(xiàng)目相關(guān)代碼就可以。因?yàn)?,F(xiàn)eign中已經(jīng)依賴了Hystrix所以在maven配置上不用做任何改動(dòng)。

1、配置文件

application.properties添加這一條:

feign.hystrix.enabled=true

2、創(chuàng)建回調(diào)類

創(chuàng)建HelloRemoteHystrix類繼承與HelloRemote實(shí)現(xiàn)回調(diào)的方法

@Component
public class HelloRemoteHystrix implements HelloRemote{

  @Override
  public String hello(@RequestParam(value = "name") String name) {
    return "hello" +name+", this messge send failed ";
  }
}

3、添加fallback屬性

在HelloRemote類添加指定fallback類,在服務(wù)熔斷的時(shí)候返回fallback類中的內(nèi)容。

@FeignClient(name= "spring-cloud-producer",fallback = HelloRemoteHystrix.class)
public interface HelloRemote {

  @RequestMapping(value = "/hello")
  public String hello(@RequestParam(value = "name") String name);

}

改動(dòng)點(diǎn)就這點(diǎn),很簡(jiǎn)單吧。

4、測(cè)試

那我們就來(lái)測(cè)試一下看看效果吧。

依次啟動(dòng)spring-cloud-eureka、spring-cloud-producer、spring-cloud-consumer三個(gè)項(xiàng)目。

瀏覽器中輸入:http://localhost:9001/hello/neo

返回:hello neo,this is first messge

說(shuō)明加入熔斷相關(guān)信息后,不影響正常的訪問(wèn)。接下來(lái)我們手動(dòng)停止spring-cloud-producer項(xiàng)目再次測(cè)試:

瀏覽器中輸入:http://localhost:9001/hello/neo

返回:hello neo, this messge send failed

根據(jù)返回結(jié)果說(shuō)明熔斷成功。

示例代碼

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java定時(shí)任務(wù)實(shí)現(xiàn)的4種方式小結(jié)

    java定時(shí)任務(wù)實(shí)現(xiàn)的4種方式小結(jié)

    這篇文章主要介紹了java定時(shí)任務(wù)實(shí)現(xiàn)的4種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Spring接口版本控制方案及RequestMappingHandlerMapping接口介紹(最新推薦)

    Spring接口版本控制方案及RequestMappingHandlerMapping接口介紹(最新推薦)

    RequestMappingHandlerMapping接口是Spring MVC中的一個(gè)核心組件,負(fù)責(zé)處理請(qǐng)求映射和處理器的匹配這篇文章主要介紹了Spring接口版本控制方案及RequestMappingHandlerMapping接口介紹,需要的朋友可以參考下
    2024-07-07
  • Java使用jdbc連接實(shí)現(xiàn)對(duì)MySQL增刪改查操作的全過(guò)程

    Java使用jdbc連接實(shí)現(xiàn)對(duì)MySQL增刪改查操作的全過(guò)程

    JDBC的全稱是Java?Database?Connectivity,即Java數(shù)據(jù)庫(kù)連接,它是一種可以執(zhí)行SQL語(yǔ)句的Java?API,下面這篇文章主要給大家介紹了關(guān)于Java使用jdbc連接實(shí)現(xiàn)對(duì)MySQL增刪改查操作的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Jmeter?BeanShell?內(nèi)置變量vars、props、prev的使用詳解

    Jmeter?BeanShell?內(nèi)置變量vars、props、prev的使用詳解

    這篇文章主要介紹了Jmeter?BeanShell?內(nèi)置變量vars、props、prev的使用?,文中給大家介紹了Jmeter中關(guān)于BeanShell的相關(guān)知識(shí),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Idea 搭建Spring源碼環(huán)境的超詳細(xì)教程

    Idea 搭建Spring源碼環(huán)境的超詳細(xì)教程

    這篇文章主要介紹了Idea 搭建Spring源碼環(huán)境,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java的四種常見(jiàn)線程池及Scheduled定時(shí)線程池實(shí)現(xiàn)詳解

    Java的四種常見(jiàn)線程池及Scheduled定時(shí)線程池實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java的四種常見(jiàn)線程池及Scheduled定時(shí)線程池實(shí)現(xiàn)詳解,在Java中,我們可以通過(guò)Executors類來(lái)創(chuàng)建ScheduledThreadPool,Executors類提供了幾個(gè)靜態(tài)方法來(lái)創(chuàng)建不同類型的線程池,包括ScheduledThreadPool,需要的朋友可以參考下
    2023-09-09
  • Java調(diào)用pyzbar解析base64二維碼過(guò)程解析

    Java調(diào)用pyzbar解析base64二維碼過(guò)程解析

    這篇文章主要介紹了Java調(diào)用pyzbar解析base64二維碼過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Spring自定義注解的實(shí)現(xiàn)與使用方式

    Spring自定義注解的實(shí)現(xiàn)與使用方式

    注解是Java中用于類、方法、參數(shù)、包的裝飾標(biāo)志,本身不具備功能,但可定義參數(shù),Java包含內(nèi)建注解和元注解,如@Target、@Retention等,描述注解的使用范圍和生命周期,Spring的AOP(面向切面編程)可以結(jié)合注解實(shí)現(xiàn)功能,如權(quán)限控制和日志記錄
    2024-09-09
  • Java關(guān)鍵字instanceof的兩種用法實(shí)例

    Java關(guān)鍵字instanceof的兩種用法實(shí)例

    這篇文章主要介紹了Java關(guān)鍵字instanceof的兩種用法實(shí)例,本文給出了instanceof關(guān)鍵字用于判斷一個(gè)引用類型變量所指向的對(duì)象是否是一個(gè)類(或接口、抽象類、父類)及用于數(shù)組比較,需要的朋友可以參考下
    2015-03-03
  • 淺談Java springboot日志管理

    淺談Java springboot日志管理

    這篇文章主要介紹了淺談Java springboot日志管理,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Java的小伙伴們有很好的幫助喲,需要的朋友可以參考下
    2021-05-05

最新評(píng)論