美文网首页
spring cloud实战:3-熔断器Hystrix

spring cloud实战:3-熔断器Hystrix

作者: jyjack | 来源:发表于2019-07-29 22:20 被阅读0次

    如果您认为对你有帮助,请点个赞!

    准备工作

    请先按照 spring cloud实战:1- 服务注册中心Eureka 完成准备工作,具体包括:

    • Eureka服务(服务注册中心):eureka_server
    • 服务提供方:provider
    • 服务消费者:consumer
      三者的关系是:consumer会通过服务注册中心调用外部服务provider

    熔断器原理概述

    熔断器是服务消费者(consumer)与服务提供者(provider
    )之间的一个开关,当此开关关闭时(即没有熔断),consumer的调用请求会发给provider处理。

    如果请求调用失败的比例达到阀值时(表示provider
    负载过高),熔断器会自动打开,这样consumer人请求就不会发给provider处理,避免provider负载过高。

    熔断器关闭达到指定时间后,会半开,即转发一个请求,若成功则关闭熔断器,若失败则继续打开。

    实战

    本实战是在 spring cloud实战:1- 服务注册中心Eureka 的基础上进行。

    由于熔断器是通过对服务调用的成功率,决定是否熔断,实际上是对后端服务提供过载保护。但熔断器的控制逻辑是在调用端。因此要启用熔断器,需要在consumer端进行处理。

    因此需要对 eureka _consumer 项目模块进行修改。

    启用熔断器

    在application.properties文件中,启用熔断器,配置如下:

    ### 启用熔断器
    feign.hystrix.enabled=true
    

    fallback实现类

    spring cloud实战:1- 服务注册中心Eureka中,我们定义了 **** 接口,但并未实现。
    在这里我们将实现该接口,该实现类将在服务端熔断后被自动调用
    新建FeignSayHelloFallback.java类,并实现IFeignSayHello接口,代码如下:

    package com.example.eureka.consumer;
    
    import org.springframework.stereotype.Component;
    import org.springframework.web.bind.annotation.RequestParam;
    
    @Component
    public class FeignSayHelloFallback implements IFeignSayHello {
        @Override
        public String sayHello(@RequestParam(value = "name") String name) {
            return "熔断保护已开启!";
        }
    }
    

    启用fallback

    在IFeignSayHello接口中,添加fallback属性指定fallback实现类

    //在FeignClient注解中,添加fallback属性指定fallback实现类
    @FeignClient(name = "spring-cloud-produce-say-hello",fallback = FeignSayHelloFallback.class)  
    

    测试熔断

    将 eureka_server、eureka_provider、eureka_consumer都启动起来。这时用浏览器访问consumer的REST服务,可以正常运行。
    然后我们将eureka_provider人工停止,再次访问consumer的REST服务,这时服务会被熔断,界面如下:


    熔断fallback

    相关文章

      网友评论

          本文标题:spring cloud实战:3-熔断器Hystrix

          本文链接:https://www.haomeiwen.com/subject/wjzirctx.html