Hystrix服务熔断入门案例

2021-08-31  本文已影响0人  CodeYang

一、服务熔断代码实现,及测试

  1. 新增 Controller 测试控制类 ,CHystrixCircuitBreakerController

/**
 * 服务熔断
 */
@RestController
public class CHystrixCircuitBreakerController {

    //整体解释:在十秒中,有十次请求,请求错误率达到 60% 跳闸
    @HystrixCommand(fallbackMethod = "providerCircuitBreaker_FallBack",commandProperties = {
            //是否开启断路器
            @HystrixProperty(name = "circuitBreaker.enabled",value = "true"),
            //请求次数
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),
            //时间窗口期(时间范围)
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),
            //失败率达到多少后跳闸
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60")
    })
    @GetMapping("/provider/circuitbreaker/{id}")
    public String providerCircuitBreaker(@PathVariable("id")Integer id){
        if(id<0){
            throw new RuntimeException("********id 不能为负数");
        }
        String serialNumber=String.valueOf(System.currentTimeMillis());

        return "调用成功,流水号:"+serialNumber+" 线程号:"+Thread.currentThread().getName();
    }

    public String providerCircuitBreaker_FallBack(@PathVariable("id")Integer id){
        return "调用失败,id 不能为负数,当前 id :"+id;
    }
}
  1. 请求测试
    在十秒中,有十次请求,请求错误率达到 60% 跳闸。正确的访问也会收到影响。

正常访问:http://localhost:8001/provider/circuitbreaker/-20

断路器未打开时.png

这时狂刷:http://localhost:8001/provider/circuitbreaker/-20

再次访问:http://localhost:8001/provider/circuitbreaker/-20

断路器打开.png

断路器在什么情况下开始起作用?

三个重要参数.png

涉及到的三个重要参数:快照时间窗、请求总阀值、错误百分比阀值。

  1. 快照时间窗:断路器确定是否打开,需要统计一些请求和错误数据,而统计的时间范围就是快照时间窗,默认为最近的10秒。

  2. 请求总数阀值:在快照时间窗内,必须满足请求总数阀值才有资格熔断。默认为20,意味着在10秒内,如果该 hystrix 命令的调用次数不足20次,即使所有的请求都超时或其他原因失败,断路器都不会打开。

  3. 错误百分比阀值:当请求总数在快照时间窗内超过了阀值,比如发生了30次调用,如果在这30次调用中,有15次发生了超时异常,也就是超过了50%的错误百分比,在默认设定50%阀值情况下,这时候就会将断路器打开。

断路器打开之后

  1. 再有请求调用的时候,将不会调用主逻辑,而是直接调用降级 fallback。 通过断路器,实现了自动地发现错误并将降级逻辑切换为主逻辑,减少响应延迟的效果。

  2. 原来的主逻辑要如何恢复?
    对于这一问题,Hystrix 也为我们实现了自动恢复功能。
    当断路器打开,对于主逻辑进行熔断之后,hystrix 会启动一个休眠时间窗,在这个时间窗内,降级逻辑是临时的成为主逻辑。
    当休眠时间窗到期,断路器将进入半开状态,释放一次请求到原来的主逻辑上,如果此次请求正常返回,那么断路器将继续闭合,主逻辑恢复,如果此次请求依然有问题,断路器继续进入打开状态,休眠时间窗重新计时。

上一篇 下一篇

猜你喜欢

热点阅读