Hystrix熔断器

Hystrix熔断器

一、Hystrix熔断器概述

Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败(雪崩)。

雪崩:一个服务失败,导致整条链路的服务都失败的情形。

Hystix 主要功能:

  • 隔离:

    • 线程池隔离(线程池的线程数量是固定的,如果调用一个服务没有响应,那么那条线程也不会返回线程池,当程序调用这个有问题的服务次数多了,线程自然而然就不够了,也就造成了其他服务没有线程可以调用了。解决办法:线程池内的线程按照一定的规则分配固定数量调用服务,这样每个服务都能有线程使用,如果一个服务出现了问题,不会影响到其他服务的调用)

在这里插入图片描述

  • 信号量隔离(给某个服务分配固定的线程数量,这个服务一旦出现问题,不会影响到其他服务的调用)

  • 降级:在调用服务的时候,服务课程会出现异常,超时时,要执行降级代码(就是反馈个消息,返回个默认数据)

  • 熔断:当调用的服务出问题时,断开引用,断开后执行降级代码

  • 限流:限制访问量

二、Hystrix降级

​ 当服务发生异常货调用超时时,返回默认数据。

降级有两个方面:

  • 服务提供方的降级(当一个服务调用另外一个服务的时候出现了异常或者超时的现象,降级代码是写在服务端的)

    步骤:

    1.在服务提供方,引入 hystrix 依赖

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

    2.定义降级方法

    /**
     * 定义降级方法:
     *  1. 方法的返回值需要和原方法一样
     *  2. 方法的参数需要和原方法一样
     */
    public Goods findOne_fallback(int id){
        Goods goods = new Goods();
        goods.setTitle("降级了~~~~");
        return goods;
    }
    

    3.使用 @HystrixCommand 注解配置降级方法

    @HystrixCommand(fallbackMethod = "findOne_fallback",commandProperties = {
            //设置Hystrix的超时时间,默认1s
            //这里面的值到HystrixCommandProperties这个抽象类中找
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value="3000")
    })
    

    4.在启动类上开启Hystrix功能:@EnableCircuitBreaker

    注意:访问的时候,别在用consumer这种消费者调用了,直接用provider服务提供方调用行了!

  • 服务消费方(调用方)的降级(当服务调用方调用一个服务的时候出现了异常或者超时的现象)

    有两种方式:

    (1)、就是和上面那个服务方的降级代码那样写,没有问题

    (2)、可以在Feign远程调用的时候进行降级。

    步骤:

    1.feign 组件已经集成了 hystrix 组件。

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

    2.定义feign 调用接口实现类,复写方法,即 降级方法

    /**
     * Feign 客户端的降级处理类
     * 1. 定义类 实现 Feign 客户端接口
     * 2. 使用@Component注解将该类的Bean加入SpringIOC容器
     */
    @Component
    public class GoodsFeignClientFulllBack implements GoodsFeignClient{
    
        @Override
        public Goods findGoodsById(int id) {
            Goods goods = new Goods();
            goods.setTitle("又要执行降级代码了!");
            return goods;
        }
    }
    

    3.在 @FeignClient 注解中使用 fallback 属性设置降级处理类。

    @FeignClient(value = "HYSTRIX-PROVIDER",fallback = GoodsFeignClientFulllBack.class)
    

    4.配置开启 feign.hystrix.enabled = true

    # 开启feign对hystrix的支持
    feign:
      hystrix:
        enabled: true
    

    访问的时候,访问服务的消费方(调用方)

    注意:两方都有降级代码,到底执行谁呀?

    ​ 消费方发起请求到了服务提供方,此时服务提供方再调用其他服务或者是执行自身的逻辑处理出了问题,会自动执行服务提供方自己的降级代码,然后把降级代码的结果响应给服务消费方,在消费方看来,接收到的响应是标准的响应,不会触发服务消费方的降级代码。但是,Feign自带的Hystrix的响应超时时间是1秒,超过了1秒,会触发降级代码的哦!

三、Hystrix熔断

​ Hystrix 熔断机制,用于监控微服务调用情况,当失败的情况达到预定的阈值(5秒失败20次),会打开断路器,拒绝所有请求,直到服务恢复正常为止。

在这里插入图片描述

理解:断路器有三种状态(关闭,打开,半开)

​ 当服务失败达到预定的阈值(5秒失败20次),会自动打开熔断器,此时会拒绝所有请求,并执行降级代码,熔断器打开时间默认为5秒钟,5秒钟后,熔断器变为半开状态,试着调用服务看是否正常,如果不正常,熔断器就再次打开,默认五秒,然后半开,循环往复。如果调用成功,熔断器就会自动关闭。

四、Hystrix熔断监控

​ Hystrix 提供了 Hystrix-dashboard 功能,用于实时监控微服务运行状态。

​ 但是Hystrix-dashboard只能监控一个微服务。

​ Netflix 还提供了 Turbine ,进行聚合监控。

关闭。

四、Hystrix熔断监控

​ Hystrix 提供了 Hystrix-dashboard 功能,用于实时监控微服务运行状态。

​ 但是Hystrix-dashboard只能监控一个微服务。

​ Netflix 还提供了 Turbine ,进行聚合监控。

具体实现:链接

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值