SpringCloud—解决雪崩效应之熔断

SpringCloud—解决雪崩效应之熔断

当一定时间内,异常请求比例(请求超时、网络故障、服务异常等)达到阀值时,启动熔断器,熔断器一旦启动,则会停止调用具体服务逻辑,通过fallback快速返回托底数据,保证服务链的完整。
熔断有自动恢复机制,如:当熔断器启动后,每隔5秒,尝试将新的请求发送给Application Service,如果服务可正常执行并返回结果,则关闭熔断器,服务恢复。如果仍旧调用失败,则继续返回托底数据,熔断器持续开启状态。
降级是出错了返回托底数据,而熔断是出错后如果开启了熔断将会一定时间不在访问application service
在这里插入图片描述

1.属性

熔断的实现是在调用远程服务的方法上增加@HystrixCommand注解。当注解配置满足则开启或关闭熔断器。
@HystrixProperty的name属性取值可以使用HystrixPropertiesManager常量,也可以直接使用字符串进行操作。

注解属性描述:

CIRCUIT_BREAKER_ENABLED
"circuitBreaker.enabled";
是否开启熔断策略。默认值为true。
CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD
"circuitBreaker.requestVolumeThreshold";
单位时间内(默认10s内),请求超时数超出则触发熔断策略。默认值为20次请求数。
EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS
execution.isolation.thread.timeoutInMilliseconds
设置单位时间,判断circuitBreaker.requestVolumeThreshold的时间单位,默认10秒。单位毫秒。
CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS
"circuitBreaker.sleepWindowInMilliseconds";
当熔断策略开启后,延迟多久尝试再次请求远程服务。默认为5秒。单位毫秒。这5秒直接执行fallback方法,不在请求远程application service。
CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE
"circuitBreaker.errorThresholdPercentage";
单位时间内,出现错误的请求百分比达到限制,则触发熔断策略。默认为50%。
CIRCUIT_BREAKER_FORCE_OPEN
"circuitBreaker.forceOpen";
是否强制开启熔断策略。即所有请求都返回fallback托底数据。默认为false。
CIRCUIT_BREAKER_FORCE_CLOSED
"circuitBreaker.forceClosed";
是否强制关闭熔断策略。即所有请求一定调用远程服务。默认为false。

2.代码示例

在原有降级代码上修改@HystrixCommand如下。
关闭ApplicationSeviceDemo项目,访问DemoFallback控制器,刷新5次后会发现页面加载快了,这时就开启熔断了。此时打开ApplicationServiceDemo,发现依然返回托底数据。到达30秒后再次访问才能正常访问ApplicationServiceDemo中内容。
注意:单位时间时间内容请求数必须达到5个(无论成功还是失败)才能满足条件。

@HystrixCommand(fallbackMethod = "myFallback",commandProperties = {
   
        
// 条件一: 请求数量到达3个
        @HystrixProperty(name= "circuitBreaker.requestVolumeThreshold",value="3"),
        // 判断时间,,10秒作为一个判断单位
        @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="10000"),
        // 条件二: 失败了到达50%
        @HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value="50"),
        // 结果: 开启熔断后,30秒不在请求远程服务
        @HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value = "30000")
})
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2313.html原文链接:https://javaforall.net

(0)
上一篇 2020年11月12日 上午9:20
下一篇 2020年11月12日 上午9:48


相关推荐

  • solt插槽

    solt插槽slot 插槽当组件中某一项需要单独定义 那么就应该使用 soltVue 实现了一套内容分发的 API 将 slot 元素作为承载分发内容的出口 单个 slot 匿名插槽 除非子组件模板包含至少一个 slot 插口 否则父组件的内容将会被丢弃 当子组件模板只有一个没有属性的 slot 时 父组件整个内容片段将插入到 slot 所在的 DOM 位置 并替换掉 slot slot

    2026年3月19日
    2
  • 【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现

    【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现通过我这些天用C++读写bmp图像的经历,摸索再摸索,终于对bmp文件的结构、操作有了一定的了解,下面就大概介绍bmp图片纯C++的读取、旋转和保存的实现过程。要用C++读取bmp图片文件,首先要弄清楚bmp格式图片文件的结构。可以参考这篇文章:http://blog.csdn.net/xiajun07061225/article/details/5813726有几点需要注意的是:在读

    2022年6月15日
    52
  • js生成随机数概率算法

    js生成随机数概率算法1 首先通过设定的概率列表 确定随机的最大值 最小值我这边都是按照 0 this GetMaxNum function varmax num 0 for varz 0 z

    2026年3月16日
    2
  • 漫画:这个靠脸吃饭的男人,太可怕了!

    今天推荐画风唯美的漫画 《重生之星光璀璨》 作为歌坛巨星的阮熙冰被双胞胎妹妹 和未婚夫设计杀害,阴差阳错重生 到了一个小服务生的身上。 她靠着努力与演技重返娱乐圈, 誓要夺回曾属于…

    2021年6月22日
    116
  • pyqt5 pycharm配置_pycharm安装pyqt5

    pyqt5 pycharm配置_pycharm安装pyqt5安装Python+PyCharm+PyQt51、安装Python访问官网https://www.python.org/,下载最新版本的Python来安装。我这里下了python3.92、安装PyCharm1)下载PyCharm,官网https://www.jetbrains.com/pycharm/download/#section=windows下载Community版本的2)汉化Pycharm:https://blog.csdn.net/qqwangfan…

    2022年8月27日
    12
  • 都2022了,不会还有人不会idea注释相关的配置吧,速进本文

    都2022了,不会还有人不会idea注释相关的配置吧,速进本文####缘由  相信大家在写代码的时候,为了可以让自己明白以及他人可以明白,都会都在项目代码中加上注释,写注释也是有讲究的,注释分为两种,一种类注释,另一种方法注释。![在这里插入图片描述](https://img-blog.csdnimg.cn/2f8cde1992434945b1875114529607f6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Iqd5aOr5

    2022年9月30日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号