Hystrix工作流程与高级应用

  1. 当调用出现问题时,开启一个时间窗(10s)
  2. 在这个时间窗内,统计调用、用次数是否达到最小请求数?
    • 如果没有达到,则重置统计信息,回到第1步
    • 如果达到了,则统计失败的请求数占所有请求数的百分比,是否达到阈值?
    • 如果达到,则跳闸(不再请求对应服务)
    • 如果没有达到,则重置统计信息,回到第1步
  3. 如果跳闸,则会开启一个活动窗口(默认5s),每隔5s,Hystrix会让一个请求通过,到达那个问题服务,看 是否调用成功,如果成功,重置断路器回到第1步,如果失败,回到第3步。
/**
* 8秒钟内,请求次数达到2个,并且失败率在50%以上,就跳闸
* 跳闸后活动窗⼝设置为3s
*/
@GetMapping("/checkStateTimeoutFallback/{userId}")
    @HystrixCommand(
            // 线程池标识,要保持唯一,不唯一的话就共用了
            threadPoolKey = "findResumeOpenStateTimeoutFallback",
            // 线程池属性细节配置
            threadPoolProperties = {
                    @HystrixProperty(name = "coreSize", value = "2"), // 线程数
                    @HystrixProperty(name = "maxQueueSize", value = "20") // 等待队列长度

            },
            // commandProperties 熔断的一些细节属性配置
            commandProperties = {
                    // 每一个属性都是一个HystrixProperty
                    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000"),

                    // hystrix高级配置,定制工作过程细节
                    // 统计时间窗口定义
                    @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "8000"),
                    // 统计时间窗口内的最小请求数
                    @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "2"),
                    // 统计时间窗口内的错误数量百分比阈值
                    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"),
                    // 自我修复时的活动时间窗口长度
                    @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "3000")
            },
            fallbackMethod = "myFallback" // 回退方法
    )
    public Integer findResumeOpenStateTimeoutFallback(@PathVariable Long userId) {
        // 使用Ribbon不需要我们自己获取服务实例,然后选择一个那种方式去访问了(自己负载均衡)
        String url = "http://lagou-service-resume/resume/openstate/" + userId; // 指定服务名
        Integer forObject = restTemplate.getForObject(url, Integer.class);
        return forObject;
    }

我们上述通过注解进行的配置也可以配置在配置文件中

# 配置熔断策略:
hystrix:
    command:
        default:
            circuitBreaker:
                # 强制打开熔断器,如果该属性设置为true,强制断路器进⼊打开状态,将会拒绝所有的请求。 默认false关闭的
                forceOpen: false
                # 触发熔断错误⽐例阈值,默认值50%
                errorThresholdPercentage: 50
                # 熔断后休眠时⻓,默认值5秒
                sleepWindowInMilliseconds: 3000
                # 熔断触发最⼩请求次数,默认值是20
                requestVolumeThreshold: 2
            execution:
                isolation:
                    thread:
                        # 熔断超时设置,默认为1秒
                        timeoutInMilliseconds: 2000

基于springboot的健康检查观察跳闸状态(自动投递微服务暴露健康检查细节)

# springboot中暴露健康检查等断点接⼝
management:
    endpoints:
        web:
            exposure:
                include: "*"
    # 暴露健康接⼝的细节
    endpoint:
        health:
            show-details: always

访问健康检查接口:http://localhost:8090/actuator/health

hystrix正常工作状态

跳闸状态 

活动窗口内自我修复 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悠然予夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值