Spring Cloud (五) - Hystrix及源码说明

雪崩效应介绍:

在这里插入图片描述
简单来说如果A调用B ,B调用C 这个时候如果C服务器发生问题,B服务一直无法调用C服务的接口,这个时候A 如果继续有请求过来 就会造成服务延迟,最后服务就会崩溃。
当多个服务同时调用时,没有及时响应,会形成一个堆积,会一直在等待,连接有没有释放,这样导致接口无法访问,hystrix就是为了解决这个问题

解决方案:
方案一:超时机制和服务降级(调用方处理)
如果一个服务没有及时调用另一个服务,就会抱一个超时错误。如果想做超时机制,需要做一个降级处理,降级处理就相当于服务的接口发生错误的时候,不去直接调用接口而是去调用本地方法

使用Feign:

  1. 主函数使用@EnableFeginClients
  2. yml中配置使用Fegin降级,
    在这里插入图片描述
  3. 在调用的类中添加fallback,Fallback.class指的是服务降级的类
    在这里插入图片描述
  4. Fallback类:
    在这里插入图片描述

方案二:熔断机制(被调用方处理)
熔断器概述:
熔断器状态(closed、open、half_open)

  • closed->open:正常情况下熔断器为closed状态,当访问同一个接口次数超过指定的比例时,就会打开熔断机制,这时候熔断器状态从closed->open。
  • open->half-open:当熔断器状态为open时,所有服务调用方调用该服务方法时候都是执行本地降级方法,hychrix提供了一个时间窗口,当熔断器状态变为open时开启一个时间窗口,这时调用调用该服务的方法时都委托给降级方法执行,如果时间超过了时间窗口,则把熔断状态从open->half-open,这时候服务调用方调用服务接口时候,就可以发起远程调用而不再使用本地降级接口,如果发起远程调用还是失败,则重新设置熔断器状态为open状态,从新记录时间窗口开始时间
  • half-open->closed: 当熔断器状态为half-open,这时候服务调用方调用服务接口时候,就可以发起远程调用而不再使用本地降级接口,如果发起远程调用成功,则重新设置熔断器状态为closed状态

使用:

  1. 主函数添加@EnableCircuitBreaker和@EnableHystrixDashboard
    在这里插入图片描述
  2. 在接口上添加:
    在这里插入图片描述

说明:

  1. enabled:设置熔断机制,true开启
  2. requestVolumeThreshoId:断路器的最小请求数,请求超过这个数量时会使用断路器
  3. sleepWindowInMilliseconds:时间窗口,触发断路器时等待的时间
  4. errorThresholdPercentage:百分比,拿最小请求数10举例,当请求数为10 * 0.6时会进入 open->half-open状态
  5. @HystrixCommand中有一个元素:fallbackMethod,可以用它来设置进入断路器时候调用的方法

@HystrixCommand源码说明:

在这里插入图片描述
查看@HystrixCommand,点击hystrix找到HystrixCommandProperties抽象类
在这里插入图片描述
可以看到这个类是@HystrixCommand默认的实例,在它的构造函数中可以看到默认的一些配置
在这里插入图片描述
可以通过配置文件将进行修改它的超时时间:

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=30000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值