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

springcloud熔斷器Hystrix的用法及說(shuō)明

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

springcloud熔斷器Hystrix使用

說(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ù)高可用的最后一道防線。

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)類

@Component
public class GradeClientImpl implements GradeClient {

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

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

3、添加fallback屬性

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

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

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

第二種方法

1、添加依賴

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

2、在啟動(dòng)類添加注解

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

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


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

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

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

依次啟動(dòng)eureka-server、eureka-client、eureka-student、eureka-grade四個(gè)項(xiàng)目

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

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

總結(jié)

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

相關(guān)文章

最新評(píng)論

莲花县| 拉萨市| 瑞丽市| 宁强县| 正定县| 社会| 周口市| 翼城县| 阜南县| 南平市| 钟祥市| 沙洋县| 隆安县| 邯郸市| 镇宁| 郑州市| 庆城县| 双柏县| 乌什县| 开原市| 临朐县| 孟津县| 博白县| 行唐县| 邹平县| 绍兴市| 太保市| 古交市| 会理县| 南城县| 宝丰县| 孟州市| 筠连县| 新源县| 南雄市| 三都| 富源县| 龙陵县| 英吉沙县| 临清市| 六安市|