最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springcloud熔斷器Hystrix的用法及說明

 更新時間:2026年06月02日 13:57:39   作者:快起來寫bug了  
SpringCloud熔斷機制Hystrix詳解,雪崩效應(yīng)防范止單元測試實現(xiàn),FeignHystrix集成與應(yīng)用示例

springcloud熔斷器Hystrix使用

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

熔斷器

雪崩效應(yīng)

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

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

熔斷器(CircuitBreaker)

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

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

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

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

Feign Hystrix

因為熔斷只是作用在服務(wù)調(diào)用這一端,因此我們根據(jù)上一篇的示例代碼只需要改動spring-cloud-consumer項目相關(guān)代碼就可以。因為,F(xiàn)eign中已經(jīng)依賴了Hystrix所以在maven配置上不用做任何改動。

第一種方法

1、配置文件

application.properties添加這一條:

feign.hystrix.enabled=true

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

@Component
public class GradeClientImpl implements GradeClient {

    @Override
    public List<Grade> findAll() {
    	//可以:
        //打印日志
        //使用消息隊列發(fā)送消息
        //發(fā)送短信

        //測試用
        List<Grade> list = new ArrayList<Grade>();
        Grade grade = new Grade();
        grade.setGradeId(404);
        grade.setGradeName("進入了熔斷器");
        list.add(grade);
        return list;
    }
}

3、添加fallback屬性

@FeignClient(name="eureka-grade",fallback = GradeClientImpl.class)
public interface GradeClient {

    @GetMapping(value = "/grades")
    List<Grade> findAll();
}

改動點就這點,很簡單吧。

第二種方法

1、添加依賴

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

2、在啟動類添加注解

@EnableHystrix
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrix
public class EurekaStudentApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaStudentApplication.class, args);
    }

}

3、修改控制層代碼

@RestController
public class StudentController {

    @Autowired
    private StudentService studentService;

    @Autowired
    private GradeClient gradeClient;

    @GetMapping(value = "/grades")
    //一旦出錯則執(zhí)行Grades方法
    @HystrixCommand(fallbackMethod = "Grades")
    public List<Grade> findAll1(){
        return gradeClient.findAll();
    }
	
	//出錯執(zhí)行的方法
    public List<Grade> Grades() {
        //可以:
        //打印日志
        //使用消息隊列發(fā)送消息
        //發(fā)送短信

        //測試
        List<Grade> list = new ArrayList<>();
        Grade grade = new Grade();
        grade.setGradeId(0);
        grade.setGradeName("出錯了,執(zhí)行了熔斷器");
        list.add(grade);
        return list;
    }


    @GetMapping(value = "/students")
    public List<Student> findAll(){
        return studentService.findAll();
    }
}

以上兩種方法都是一樣的 然后測試一下:

那我們就來測試一下看看效果吧。

依次啟動eureka-server、eureka-client、eureka-student、eureka-grade四個項目

然后我們關(guān)閉 eureka-grade

SpringCloud使用Zuul構(gòu)建微服務(wù)網(wǎng)關(guān)

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中的volatile關(guān)鍵字原理深入解析

    Java中的volatile關(guān)鍵字原理深入解析

    這篇文章主要介紹了Java中的volatile關(guān)鍵字原理深入解析,volatile是Java 編程語言允許線程訪問共享變量,為了確保共享變量能被準(zhǔn)確和一致地更新,線程應(yīng)該確保通過排他鎖單獨獲得這個變量,需要的朋友可以參考下
    2023-12-12
  • MyBatis自定義類型轉(zhuǎn)換器實現(xiàn)加解密

    MyBatis自定義類型轉(zhuǎn)換器實現(xiàn)加解密

    這篇文章主要介紹了MyBatis自定義類型轉(zhuǎn)換器實現(xiàn)加解密的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • 在SpringBoot中注入RedisTemplate實例異常的解決方案

    在SpringBoot中注入RedisTemplate實例異常的解決方案

    這篇文章主要介紹了在SpringBoot中注入RedisTemplate實例異常的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java 異步回調(diào)機制實例分析

    Java 異步回調(diào)機制實例分析

    這篇文章主要介紹了Java 異步回調(diào)機制實例解析的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java線程池大小的設(shè)置方法實例

    Java線程池大小的設(shè)置方法實例

    線程池的設(shè)置是有方法的,不是憑借簡單的估算來決定的,這篇文章主要給大家介紹了關(guān)于Java線程池大小的設(shè)置方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • SpringBoot?調(diào)用外部接口的三種實現(xiàn)方法

    SpringBoot?調(diào)用外部接口的三種實現(xiàn)方法

    Spring Boot調(diào)用外部接口的方式有多種,常見的有以下三種方式:RestTemplate、Feign 和 WebClient,本文就詳細介紹一下,感興趣的可以了解一下
    2023-08-08
  • MyBatis執(zhí)行動態(tài)SQL的方法

    MyBatis執(zhí)行動態(tài)SQL的方法

    今天小編就為大家分享一篇關(guān)于MyBatis執(zhí)行動態(tài)SQL的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java IO之包裝流詳解

    Java IO之包裝流詳解

    這篇文章主要為大家介紹了Java IO之包裝流,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • SSH框架網(wǎng)上商城項目第24戰(zhàn)之Struts2中處理多個Model請求的方法

    SSH框架網(wǎng)上商城項目第24戰(zhàn)之Struts2中處理多個Model請求的方法

    這篇文章主要為大家詳細介紹了SSH框架網(wǎng)上商城項目第24戰(zhàn)之Struts2中處理多個Model請求的方法,感興趣的小伙伴們可以參考一下
    2016-06-06
  • SpringBoot為啥不用配置啟動類的實現(xiàn)

    SpringBoot為啥不用配置啟動類的實現(xiàn)

    這篇文章主要介紹了SpringBoot為啥不用配置啟動類的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評論

习水县| 奉贤区| 论坛| 四平市| 仙居县| 吉木乃县| 柞水县| 波密县| 阳东县| 普宁市| 黄浦区| 易门县| 民县| 巴林右旗| 景洪市| 霍林郭勒市| 鹤庆县| 平潭县| 抚远县| 达州市| 云霄县| 牟定县| 大兴区| 余姚市| 渝中区| 钟祥市| 敖汉旗| 全椒县| 宝兴县| 宝鸡市| 林西县| 静安区| 汉川市| 开平市| 武城县| 铁岭县| 云和县| 泗洪县| 仙居县| 鹤岗市| 辽宁省|