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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 用matlab画一元二次函数图像_matlab绘制二元函数的三维图

    用matlab画一元二次函数图像_matlab绘制二元函数的三维图二元函数可以用mesh或者surf函数画图。下面举例说明:[X,Y]=meshgrid(-8:.5:8);Z=sqrt(X.^2+Y.^2);mesh(X,Y,Z)图像如下:觉得有帮助就采纳吧www.mh456.com防采集。^subplot221fimplicit3(@5261(x,y,z)x.^41022+y.^2-z)title(‘z=x^2+1653y^2’)subplot222…

    2025年9月24日
    4
  • MS17010漏洞利用姿势

    MS17010漏洞利用姿势MSF在msf中常规的17-010打法如下扫描是否存在ms17-010漏洞:nmap-n-p445–scriptsmb-vuln-ms17-010192.168.1.0/24–openMSF常规漏洞利用msf>useexploit/windows/smb/ms17_010_eternalbluemsf>setrhost192.168.1.112目标出网时反向打:msf>setpayloadwindows/x64/met..

    2022年4月29日
    501
  • 不能读取文件“itunes.library.itl”因为它是由更高级别的itunes所创建的

    不能读取文件“itunes.library.itl”因为它是由更高级别的itunes所创建的转自:https://zhidao.baidu.com/question/80796363.html

    2022年7月4日
    23
  • 什么是大数据架构?需要学什么内容?[通俗易懂]

    什么是大数据架构?需要学什么内容?[通俗易懂]大数据架构设计用来处理对传统数据库系统而言太大或太复杂的数据的引入、处理和分析。组织进入大数据领域的门槛各不相同,具体取决于用户的权限及其工具的功能。对某些组织来说,大数据可能意味着数百个GB的数据,而对另一些组织来说,大数据则意味着数百个TB的数据。随着处理大数据集的工具的发展,大数据的涵义也在不断地变化。慢慢地,这个术语更多的是指通过高级分析从数据集获取的价值,而不是严格地指数据的大小…

    2022年5月16日
    36
  • 抖音python真的那么好吗_python看抖音用户画像,摩羯天蝎居然刷得最多?

    抖音python真的那么好吗_python看抖音用户画像,摩羯天蝎居然刷得最多?python看抖音用户画像,摩羯天蝎居然刷得最多?

    2022年6月3日
    41
  • 域名绕过备案使用国内服务器_如何查看服务器的端口

    域名绕过备案使用国内服务器_如何查看服务器的端口现今,互联正成为企业的竞争优势。然而,受限于跨运营商集成挑战、品质参差不齐,以及冗长的网络供应时间等,使得企业无法在数字经济中,实现强而有力的竞争。天下数据免备案CDN平台,为企业提供灵活的“一站式海外免备案CDN解决方案”。让企业提高全球用户的访问体验、创造新的价值。免备案CDN的原理免备案CDN加速原理是将源站内容分发至海外多个高防服务器节点,通过智能管理系统对网络流量分配控制,使用户从…

    2025年9月7日
    4

发表回复

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

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