应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

SpringCloud中断路器CircuitBreaker的

  环境:Springboot2。3。12。RELEASEcloudnetflixhystrix2。2。10。RELEASE简介
  SpringCloudCircuitbreaker(断路器)提供了跨不同断路器实现的抽象。它提供了在应用程序中使用的一致API,允许开发人员选择最适合应用程序需要的断路器实现。
  支持的断路器类型:NetfixHystrixResilience4JSentinelSpringRetry核心概念
  要在代码中创建断路器(circuitbreaker),可以使用断路器工厂API。当您在类路径中包含SpringCloudCircuitBreakerstarter时,将自动创建一个实现此API的bean。下面给出了使用此API的一个非常简单的示例:ServicepublicstaticclassDemoService{privateRestTemplaterest;privateCircuitBreakerFactorycbFactory;publicDemoService(RestTemplaterest,CircuitBreakerFactorycbFactory){this。restrest;this。cbFactorycbFactory;}publicStringslow(){通过默认的CircuitBreakerFactory工厂创建一个指定id(名称)的断路器run方法是实际执行你的业务方法,第二个参数throwable是当发生异常或者是执行超时执行的回退(降级)处理returncbFactory。create(slow)。run(()rest。getForObject(slow,String。class),throwablefallback);}}项目配置
  通过引入下面不同依赖来确定使用具体的那个断路器Hystrixorg。springframework。cloud:springcloudstarternetflixhystrixResilience4Jorg。springframework。cloud:springcloudstartercircuitbreakerresilience4jReactiveResilience4Jorg。springframework。cloud:springcloudstartercircuitbreakerreactorresilience4jSpringRetryorg。springframework。cloud:springcloudstartercircuitbreakerspringretrySentinalorg。springframework。cloud:springcloudstartercircuitbreakersentinal
  以上5种断路器是不同的实现方式,根据需要引入即可。示例
  这里以Hystrix为例来使用
  引入依赖dependencygroupIdorg。springframework。cloudgroupIdspringcloudstarternetflixhystrixartifactIdversion2。2。10。RELEASEversiondependency
  定义具有熔断功能的服务ServicepublicclassDemoService{privateRestTemplaterest;注入系统默认的实现privateCircuitBreakerFactorycbFactory;publicDemoService(RestTemplaterest,CircuitBreakerFactorycbFactory){this。restrest;this。cbFactorycbFactory;}publicStringslow(){使用系统默认的实现创建断路器进行业务的处理returncbFactory。create(slow)。run(()rest。getForObject(http:localhost:8080demosslow,String。class),throwablefallback);}publicStringslow2(){使用自定义的断路器工厂进行业务的处理returncbf()。create(demoslow)。run(()rest。getForObject(http:localhost:8080demosslow,String。class),throwablefallback);}可以将这个定义为Bean来覆盖系统默认的实现,在系统默认的实现上有条件限定privateCircuitBreakerFactoryHystrixCommand。Setter,HystrixCircuitBreakerFactory。HystrixConfigBuildercbf(){HystrixCircuitBreakerFactorycbfnewHystrixCircuitBreakerFactory();配置线程池HystrixThreadPoolProperties。SetterthreadPoolPropertiesHystrixThreadPoolProperties。Setter();threadPoolProperties。withCoreSize(5)。withKeepAliveTimeMinutes(5)。withMaxQueueSize(Integer。MAXVALUE)。withQueueSizeRejectionThreshold(1000);配置默认的执行行为属性HystrixCommandProperties。SettercommandPropertiesHystrixCommandProperties。Setter();commandProperties。withCircuitBreakerEnabled(true)当请求超过了3s那么断路器就会工作进行回退(降级处理),执行上面run方法中的第二个参数。withExecutionTimeoutInMilliseconds(3000)。withRequestCacheEnabled(true)隔离策略有两种THREAD,SEMAPHORETHREAD:避免线程被阻塞SEMAPHORE:适合高并发限流处理;因为线程池的方式一般不会创建过多的线程线程是有限的,在高并发情况下是没法满足响应处理的。。withExecutionIsolationStrategy(ExecutionIsolationStrategy。THREAD);将其加入到集合中,为不同的服务创建不同的配置cbf。configure(builder{builder。commandProperties(commandProperties)。groupName(demo);},demoslow);当默认的id不存在时使用这默认的配置cbf。configureDefault(id{HystrixCommand。SettersetterHystrixCommand。Setter。withGroupKey(HystrixCommandGroupKey。Factory。asKey(demo))服务分组,大的模块。andCommandKey(HystrixCommandKey。Factory。asKey(demoslow))服务标识(具体服务分组中的某一个子的服务),子模块。andThreadPoolKey(HystrixThreadPoolKey。Factory。asKey(demopools))线程池名称。andThreadPoolPropertiesDefaults(threadPoolProperties)线程池相关配置。andCommandPropertiesDefaults(commandProperties);执行时相关属性配置returnsetter;});returncbf;}}
  Controller接口RestControllerRequestMapping(demos)publicclassDemoController{ResourceprivateDemoServicedemoService;GetMapping(index)publicObjectindex(){returndemoService。slow2();}GetMapping(slow)publicObjectslow(){try{TimeUnit。SECONDS。sleep(5);}catch(InterruptedExceptione){e。printStackTrace();}returnslow;}}原理
  CircuitBreakerFactorycreate方法创建了CircuitBreaker实例
  根据当前的CLASSPATH我们使用的是Hystrix,那么这里使用的工厂就是:
  HystrixCircuitBreakerFactory类publicclassHystrixCircuitBreakerFactoryextendsCircuitBreakerFactoryHystrixCommand。Setter,HystrixCircuitBreakerFactory。HystrixConfigBuilder{
  泛型参数:Setter就是用来配置Hystrix相关配置信息的(这里主要用来CommandKey与Setter进行绑定),HystrixConfigBuilder用来构建HystrixCommand。Setter对象。
  当执行HystrixCircuitBreakerFactoryconfigure方法时:publicabstractclassAbstractCircuitBreakerFactoryCONF,CONFBextendsConfigBuilderCONF{privatefinalConcurrentHashMapString,CONFconfigurationsnewConcurrentHashMap();publicvoidconfigure(ConsumerCONFBconsumer,String。。。ids){for(Stringid:ids){构建一个Builder对象CONFBbuilderconfigBuilder(id);这里通过builder(HystrixConfigBuilder)对象来应用Consumer中编写的配置信息consumer。accept(builder);构建HystrixCommand。Setter对象CONFconfbuilder。build();最后将通过id与Setter对象绑定keyvalue存入Map集合中getConfigurations()。put(id,conf);}}该方法在子类HystrixCircuitBreakerFactory中实现protectedabstractCONFBconfigBuilder(Stringid);}
  断路器具体的子类实现HystrixCircuitBreakerFactory子类继承的父类中的泛型:第一个泛型参数:需要构建什么样的一个配置,第二个泛型参数:通过谁来构建第一个泛型参数配置publicclassHystrixCircuitBreakerFactoryextendsCircuitBreakerFactoryHystrixCommand。Setter,HystrixCircuitBreakerFactory。HystrixConfigBuilder{publicHystrixConfigBuilderconfigBuilder(Stringid){returnnewHystrixConfigBuilder(id);}publicstaticclassHystrixConfigBuilderextendsAbstractHystrixConfigBuilderHystrixCommand。Setter{publicHystrixConfigBuilder(Stringid){super(id);}从这里也看出来最终Builder就是用来构建Setter对象用OverridepublicHystrixCommand。Setterbuild(){returnHystrixCommand。Setter。withGroupKey(getGroupKey())。andCommandKey(getCommandKey())。andCommandPropertiesDefaults(getCommandPropertiesSetter());}}}
  断路器工厂有了,接下来就是通过工厂创建具体的断路器对象了
  通过上面的代码执行cbf()。create(demoslow)方法时执行了什么?publicclassHystrixCircuitBreakerFactoryextendsCircuitBreakerFactoryHystrixCommand。Setter,HystrixCircuitBreakerFactory。HystrixConfigBuilder{privateFunctionString,HystrixCommand。SetterdefaultConfigurationidHystrixCommand。Setter。withGroupKey(HystrixCommandGroupKey。Factory。asKey(getClass()。getSimpleName()))。andCommandKey(HystrixCommandKey。Factory。asKey(id));publicHystrixCircuitBreakercreate(Stringid){通过上面分析最终所有的Hystrix的Setter会与id绑定存入一个Map中这里computeIfAbsent方法先从集合中通过id获取,如果获取不到则将第二个参数存入集合中返回HystrixCommand。SettersettergetConfigurations()。computeIfAbsent(id,defaultConfiguration);returnnewHystrixCircuitBreaker(setter);}}
  上面创建的是HystrixCircuitBreaker断路器,当执行run方法时:publicclassHystrixCircuitBreakerimplementsCircuitBreaker{privateHystrixCommand。Settersetter;publicHystrixCircuitBreaker(HystrixCommand。Settersetter){this。settersetter;}OverridepublicTTrun(SupplierTtoRun,FunctionThrowable,Tfallback){最终执行的就是Hystrix的核心HystrixCommand对象HystrixCommandTcommandnewHystrixCommandT(setter){OverrideprotectedTrun()throwsException{returntoRun。get();}OverrideprotectedTgetFallback(){returnfallback。apply(getExecutionException());}};returncommand。execute();}}
  完毕!!!
  关注转发
  Sentinel与Hystrix的对比
  SpringCloudHystrix实现资源隔离应用
  SpringCloudGateway应用Hystrix限流功能自定义Filter详解
  SpringBootSecurity防重登录及在线总数
  SpringRetry重试框架的应用
  springbootmybatisjpa实现读写分离
  Spring容器对象BeanFactory与ApplicationContext你都清楚了吗?

Web2。0已沦落为夕阳产业,新的创业机会都在Web3。0,越发觉得Web2。0下的互联网红利基本消失殆尽,在互联网巨头的残酷征伐下,大厂的城墙越垒越高,各细分赛道的市场份额早已被瓜分殆尽,新的机会越来越少;可以这么说,当下的Web2。……姐姐吃钙片,弟弟喝牛奶,姐弟俩都12岁,身高为何却差了20公补钙可能是很多人都在做的一件事情,喝牛奶补钙是连幼儿园的孩子都已经知晓的事情,只不过也有很多人选择其他的方法来补钙,钙片也是其中的一种。爱乐养生指南钙在人体中的重要作用1……炸蘑菇调面糊,用面粉淀粉都不对,厨师教你一招,外酥里嫩不回软炸蘑菇调面糊,用面粉淀粉都不对,厨师教你一招,外酥里嫩不回软食用菌的种类很多,比如香菇、金针菇、杏鲍菇、平菇等,营养价值都很高,做法也非常多。就拿平菇来说,做汤味道鲜美,……徒步走世界第三十四章跨过大西洋来到英吉利我是在伦敦时间晚上9点15分到达伦敦希思罗(Heathrow)机场的,办完入境手续已是10点了。天也晚了,我该到哪里去呢?伦敦的住宿费一定很高。我想今晚就在机场出口厅将就一夜,……阿达马特劳雷回巴萨是个什么性质的操作?阿达马特劳雷已经在巴塞罗那完成了体检,只待巴萨宣布这位新援。阿达马特劳雷很难被称为是一名备受期待的引援,他的风格、效率和他在英超中游队狼队的替补身份都引起了舆论的争议。阿……进编制的感觉,真好刘小前原创我是个农民的儿子,天生就是个农民。一辈子没进过编制,只知道日出而作,日落而息。每每看到那些在编制内的人,周一上班,周六礼拜,逍遥自在,心里非常羡慕!……感动,游子回家2。0!C罗联系老东家,遭8大豪门拒绝,球王想目前C罗的离队新闻也出现了极大的反转,本来都以为他没有球队可以去的情况下。曼联跟队记者lauriewhitwell突然报道了C罗和门德斯的最新计划。目前C罗已经让门德斯和……5天抛售100万股港股,理想汽车总裁已套现超9000万这两天很多持有新能源股票的股民坐不住了,根据网传美国将从2024年开始,将全面禁止中国产的电动车电池组,2025年起,全面禁止从中国进口新能源矿物原材料。个人总有一种感觉……30万,中兴的国产操作系统突出重围,挑战windows近日,中兴的新支点操作系统发布了服务器模式,这是新支点操作系统三大模式(桌面、服务器、平板)中的其中一种,此次服务器模式的发布,将为解决操作系统碎片化又添上重要的一环。新……信创概念龙头股及信创概念查询完整版未来五年是大信创发展的关键时期,发展空间广阔。短期来看,2022年是信创的元年,从2023年开始,金融、运营商、电力等八大关键行业的国产化有望加速。预计到2025年中国信……一边是新能源车涨价,一边是特斯拉降价促销,洗牌开始了?众所周知,今年以来受到供应链以及原材料涨价等因素的影响,国内几乎所有新能源汽车品牌都进行了涨价。但涨价之路并没有停歇,最近又有不少新能源车型官宣涨价。威马涨价10月1日,……原神在角色的丰富程度上超越塞尔达,还会不会被人喷?游戏中的笔杆王者,每日靠玩游戏过日子,玩网游也有20个年头,我有自己独特的见解,作为一个10年不脱坑的老玩家,如果文章写的有什么问题,请重喷!如果大家觉得好,请转发加点赞!非常……
中医治疗心脑血管疾病,常用的穴位按摩方法和注意事项穴位按摩是一种中医养生方法,通过按摩人体穴位,以调节气血、平衡阴阳、促进身体自愈的作用。在中医学中,人体有361个穴位,按摩不同的穴位可以产生不同的效果。穴位按摩是一种简单、方……特斯拉(TSLA。US)又双叒叕降价了!美国ModelS降幅智通财经APP获悉,特斯拉(TSLA。US)当地时间周日深夜宣布下调ModelS、ModelX在美国的起售价,分别降价5000美元和10000美元,以寻求在本季度最后一个月提振……官宣!本周六倪妮高叶等将出席搜狐25周年庆典暨搜狐时尚盛典2月25日,搜狐25周年庆典暨搜狐时尚盛典即将启幕。本届盛典以长期主义穿越流行为主题,向始终坚守自我风格的时装设计师、超模、造型师,为时尚发展贡献实力的先锋人物与风尚品牌、深度……姐的晚间护肤来了,超下饭的电子榨菜晚间护肤电子榨菜独居女生的日常。搞个运镜,今天化了雪见的仿妆。雪见真的好可爱。我好爱呀!约了龙葵来这个什么塔,好闺蜜合拍一张,老娘独美,终于下班。日常发个疯。今天搞一个沉浸式护肤,……29。99万起售?小米汽车曝光续航1036公里,零百加速3。2021年3月,小米集团正式宣布进军汽车领域。自小米汽车宣布造车以来备受关注,雷军的传奇创业经历更是为小米汽车增添了无限可能性。据官方透露,小米汽车的首期投资已经超过100亿,……轻工行业将加快健全产品数字化追溯体系中国轻工业联合会会长张崇和在近日于京召开的践行三品行动服务美好生活创新成果发布会上表示,中国轻工业联合会将引导轻工行业企业健全产品数字化追溯体系,特别是将推动家电、家具、玩具等……失信?征信?傻傻分不清楚?在现在多数人负债的大环境下,一些相关的词语逐渐频繁的出现在我们的生活中。对于已经有负债的人来说,当可能面临还款压力时,常常担心着自己的征信是否会受损,受损以后会给自己带来什么影……可观星辰能阅天书,上海人登山顶的快乐回来了!123岁的天文台春天的脚步近了,在上海踏青登高,佘山是许多市民的选择。而现在,登顶的快乐又多了几分:经过两年的大规模修缮,山顶的上海天文博物馆即将开放了!123岁的天文台焕新归来上……科学家发现一种全新的分形物理系统的属性和行为在很大程度上取决于它的维数。通常,我们熟知的事物大多有着整数的维数,比如一维、二维、三维。然而,除了整数的维度之外,还存在具有非整数维度的对象分形。自被发现……冰雪大世界的崩塌,哈尔滨你还会再来吗?各位游客朋友:鉴于气温升高因素影响,第24届哈尔滨冰雪大世界将于2023年2月25日(星期六)22:00闭园。感谢您的支持和厚爱,感恩这个冬天的陪伴!期待与您……20个关于吃喝拉睡的养身误区大家想知道的都在里面了请耐心看完很多人习以为常的养生知识其实呢是错的。我总结了二十条大家最常见的认识误区。首先是关于吃的误区。第一,食物相克是不科学的,食物相克是没有根本的科学依据的。一些人在吃了所谓的相克食……散文丨慈母十年祭戴雪峰转眼间,母亲已离开我们整整十年。母亲是农历癸巳年(2013年)二月二十八日(阳历4月8日)傍晚离世的,清明刚过,细雨霏霏。医院护士第一时间给我打来电话,……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网