• Hystrix工作流程与高级应用


    1. 当调用出现问题时,开启一个时间窗(10s)
    2. 在这个时间窗内,统计调用、用次数是否达到最小请求数?
      • 如果没有达到,则重置统计信息,回到第1步
      • 如果达到了,则统计失败的请求数占所有请求数的百分比,是否达到阈值?
      • 如果达到,则跳闸(不再请求对应服务)
      • 如果没有达到,则重置统计信息,回到第1步
    3. 如果跳闸,则会开启一个活动窗口(默认5s),每隔5s,Hystrix会让一个请求通过,到达那个问题服务,看 是否调用成功,如果成功,重置断路器回到第1步,如果失败,回到第3步。
    1. /**
    2. * 8秒钟内,请求次数达到2个,并且失败率在50%以上,就跳闸
    3. * 跳闸后活动窗⼝设置为3s
    4. */
    5. @GetMapping("/checkStateTimeoutFallback/{userId}")
    6. @HystrixCommand(
    7. // 线程池标识,要保持唯一,不唯一的话就共用了
    8. threadPoolKey = "findResumeOpenStateTimeoutFallback",
    9. // 线程池属性细节配置
    10. threadPoolProperties = {
    11. @HystrixProperty(name = "coreSize", value = "2"), // 线程数
    12. @HystrixProperty(name = "maxQueueSize", value = "20") // 等待队列长度
    13. },
    14. // commandProperties 熔断的一些细节属性配置
    15. commandProperties = {
    16. // 每一个属性都是一个HystrixProperty
    17. @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000"),
    18. // hystrix高级配置,定制工作过程细节
    19. // 统计时间窗口定义
    20. @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "8000"),
    21. // 统计时间窗口内的最小请求数
    22. @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "2"),
    23. // 统计时间窗口内的错误数量百分比阈值
    24. @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"),
    25. // 自我修复时的活动时间窗口长度
    26. @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "3000")
    27. },
    28. fallbackMethod = "myFallback" // 回退方法
    29. )
    30. public Integer findResumeOpenStateTimeoutFallback(@PathVariable Long userId) {
    31. // 使用Ribbon不需要我们自己获取服务实例,然后选择一个那种方式去访问了(自己负载均衡)
    32. String url = "http://lagou-service-resume/resume/openstate/" + userId; // 指定服务名
    33. Integer forObject = restTemplate.getForObject(url, Integer.class);
    34. return forObject;
    35. }

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

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

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

    1. # springboot中暴露健康检查等断点接⼝
    2. management:
    3. endpoints:
    4. web:
    5. exposure:
    6. include: "*"
    7. # 暴露健康接⼝的细节
    8. endpoint:
    9. health:
    10. show-details: always

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

    hystrix正常工作状态

    跳闸状态 

    活动窗口内自我修复 

  • 相关阅读:
    数据分析、数据挖掘常用的数据清洗方法
    IDM激活
    webman跨域相关问题
    十四、事务
    信道加密设备与网络加密设备差异性研究和运维保障管理
    javavue图书档案管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    独立站SaaS系统站群模式怎么玩
    通关GO语言05 函数和方法:Go 语言中的函数和方法到底有什么不同?
    使用Node.js手撸一个建静态Web服务器,内部CV指南
    徒步探险家雷殿生语录
  • 原文地址:https://blog.csdn.net/weixin_52851967/article/details/126454239