专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

SpringCloud集成Resilience4j实现熔断器

  前言
  在文章《小谈Springcloud中的几个主流熔断器》,我们介绍了SpingCloud架构中的几个主流熔断器,其中SpringCloud官方推荐的Resilience4j作为2020。x以后的新秀,远远没有hystrix有名,相关的文档也还不够多;今天这个文章就来讲讲SpringCloud如何使用Resilience4j实现熔断器;
  Resilience4j
  resilience4j是一个轻量级、易于使用的容错库,其灵感来自Netflixesilience4j是一个轻量级、易于使用的容错库,其灵感来自NetflixHystrix,但专为Java8和函数式编程设计。
  Resilience4j提供高阶函数(decorators)来增强任何功能接口、lambda表达式或方法引用,包括断路器、速率限制器、重试或舱壁。可以在任何函数接口、lambda表达式或方法引用上使用多个装饰器。
  Resilience4j非常轻量级,不仅可以在SpringCloud进行使用,还可以直接在自己的Java程序里通过Resilience4j的API实现RateLimite的功能;这点也是笔者非常认同的一点;支持和扩展上更为方便;今天的这个文章,重点还是介绍如何在SpringCloud里使用Resilicen4j
  导入依赖包
  通过pom。xml引入对Resilience4j的依赖
  dependencygroupIdio。github。resilience4jgroupIdresilience4jspringbootartifactIddependency
  配置resilience4j
  在项目的applicaiton。yml里添加SpringCloud里resilience4j的相关配置
  resilience4j。circuitbreaker:configs:default:registerHealthIndicator:trueslidingWindowSize:10minimumNumberOfCalls:5permittedNumberOfCallsInHalfOpenState:3automaticTransitionFromOpenToHalfOpenEnabled:truewaitDurationInOpenState:5sfailureRateThreshold:50eventConsumerBufferSize:10recordExceptions:org。springframework。web。client。HttpServerErrorExceptionjava。util。concurrent。TimeoutExceptionjava。io。IOExceptionignoreExceptions:com。kxblive。common。error。CustomExceptionshared:slidingWindowSize:100permittedNumberOfCallsInHalfOpenState:30waitDurationInOpenState:1sfailureRateThreshold:50eventConsumerBufferSize:10ignoreExceptions:com。kxblive。common。error。CustomExceptioninstances:backendA:baseConfig:defaultbackendB:registerHealthIndicator:trueslidingWindowSize:10minimumNumberOfCalls:10permittedNumberOfCallsInHalfOpenState:3waitDurationInOpenState:5sfailureRateThreshold:50eventConsumerBufferSize:10recordFailurePredicate:com。kxblive。common。error。FailureExceptionPredicateresilience4j。retry:configs:default:maxAttempts:3waitDuration:100retryExceptions:org。springframework。web。client。HttpServerErrorExceptionjava。util。concurrent。TimeoutExceptionjava。io。IOExceptionignoreExceptions:com。kxblive。common。error。CustomExceptioninstances:backendA:baseConfig:defaultbackendB:baseConfig:defaultresilience4j。bulkhead:configs:default:maxConcurrentCalls:100instances:backendA:maxConcurrentCalls:10backendB:maxWaitDuration:10msmaxConcurrentCalls:20resilience4j。threadpoolbulkhead:configs:default:maxThreadPoolSize:4coreThreadPoolSize:2queueCapacity:2instances:backendA:baseConfig:defaultbackendB:maxThreadPoolSize:1coreThreadPoolSize:1queueCapacity:1resilience4j。ratelimiter:configs:default:registerHealthIndicator:falselimitForPeriod:10limitRefreshPeriod:1stimeoutDuration:0eventConsumerBufferSize:100instances:backendA:baseConfig:defaultbackendB:limitForPeriod:6limitRefreshPeriod:500mstimeoutDuration:3sresilience4j。timelimiter:configs:default:cancelRunningFuture:falsetimeoutDuration:2sinstances:backendA:baseConfig:defaultbackendB:baseConfig:default
  在这个配置中分别配置了circuitbeaker、retry、bulkhead、ratelimiter,timelimiter,threadpoolbulkhead这些相关的熔断限流的相关项目。引入resilience4jspringboot集成了circuitbeaker、retry、bulkhead、ratelimiter几个模块的功能,提供相关的实现;我们可以根据业务的实际需要对这些相关项目进行具体配置修改;
  开发上和使用Hystrix大致上一样;不过注意调整一下自己的地方
  feign契约只能用feign的,不能用SpringMVC的契约
  feign契约只能用feign的,不能用SpringMVC的契约;所以不能使用默认的方式,必须通过autoconfiguraiton进行修改
  BeanpublicContractfeignContract(){returnnewContract。Default();}BeanpublicContractfeignContract(){returnnewSpringMvcContract();}
  使用标准Feign注解
  由于修改了feign的constract方式;所以默认的feign注解方式,不能使用SpringMVC的方式,必须使用Feign的标准方式
  afterHystrixisremovedfromSpringCloud2021。0。1,thefallbackisineffectiveFeignClient(name{codeman。service。name:codeman},url{codeman。service。address:},fallbackCodeManFallbackImpl。class)publicinterfaceCodeManFeignextendsCodeManService{RequestLine(GETcodemaninfoversion)publicStringgetVersion();RequestLine(GETcodemaninfoauthor)publicStringgetAuthor();RequestLine(GETcodemaninfoauthor{userid})对应请求方式和路径publicStringrequestLine(Param(userid)Stringuserid);}
  通过上面的代码可以看到在Feign的定义接口里,不再使用SpringMVC里的标准PostGetDeleteRequest等;而是使用Feign标准的注解RequestLine;这个估计大多数做过Feign的朋友,还不知道这个才是Feign的标准Annotation;由于上一步,我们修改了Consract不再使用SpringMVCConstract;所以PostGetDeleteRequest等这些在SpringMVC里的Annotation不能使用;必须替换;
  业务调用
  上一段代码,我们定义出了RPC的remote调用接口;在service层,我们使用已定义的Feign接口,完成业务上的调用;
  ComponentpublicclassCodeManServiceImplimplementsCodeManService{AutowiredCodeManFeigncodeManFeign;Value({codeman。service。address:http:{codeman。service。name:codeman}})privateStringurl;Value({codeman。service。name:codeman})privateStringname;CircuitBreakercircuitBreaker;CodeManFeigncodeManFeign;PostConstructpublicvoidinit(){circuitBreakerCircuitBreaker。ofDefaults(backendA);FeignDecoratorsdecoratorsFeignDecorators。builder()。withFallback(newCodeManFallbackImpl(),FeignException。class)。build();codeManFeignResilience4jFeign。builder(decorators)。target(newTarget。HardCodedTarget(CodeManFeign。class,name,url));}OverridepublicStringgetVersion(){returncodeManFeign。getVersion();}OverridepublicStringgetAuthor(){returncodeManFeign。getAuthor();}OverridepublicStringrequestLine(Stringuserid){returncodeManFeign。requestLine(userid);}}
  上面的业务调用的代码;和我们经常使用OpenFeign进行调用上有点差别;在与对CodeManFeign的IOC的获取上;可以看到代码里
  注释掉了通过IOC的方式
  Autowired
  CodeManFeigncodeManFeign;
  而是通过
  PostConstruct
  publicvoidinit(){
  }
  的方式,在init里通过FeignDecorators。builder()去实例化了Resilience4jFeign。builder(decorators)。target()的方式去实例化了这个;这里也是不解的地方;为什么不去类似Hystrix的哦方式。在Feign接口定义的时候,也去做一些绑定,而是要手工在这里通过API进行绑定;对这个不解:个人的感觉;可能还是在产品设计的时候,让这个设置更加的细化吧。
  在我们自己的项目里,在这里是自己做了处理的,其实这个处理的目的就省略掉Init里的代码
  定义Fallback的实现
  publicclassCodeManFallbackImplimplementsCodeManService{OverridepublicStringgetVersion(){returnNA;}OverridepublicStringgetAuthor(){returnSpringCloud;}OverridepublicStringrequestLine(Stringuserid){returnKillteam‘spoison;}}
  通过以上的步骤,就可以实现Resilience4j的熔断器的实现了。题外话,由于我们自己的项目都是使用的springcloud来实现微服务;并且都是在springcloud的基础上结合公司项目的特点,封装了自己的springcloud的开发框架,在springcloud的ioc是个好东西,但是在spring里的ioc到处都是,不仅增加了调试问题和追踪问题的复杂程度;而且更让人不放心的就是ioc都是使用反射或者动态代理的方式进行处理的,这样的实现方式真的存在着很大的隐患;不过由于我们使用SpringCloud实现的微服务大多数都是来处理业务应用,反射的性能低下相对于业务应用往往性能的瓶颈而言,基本上都可以忽略不计了,这样的隐患也就藏起来了。当然在学习了go语言以后,深深地体会到了,做服务和做业务对设计模式的取舍点的不同;
  结束语
  本文主要介绍的是在SpringCloud微服务开发中,如何使用Resilience4j实现熔断器功能的实现方式;也可以直接通过resilience4j的API,在自己的Java程序里实现熔断器功能,说实在的,SpringCloud的微服务体系真的和ServiceMesh的体系一比较,真的就是一个小孩和大人的比较,熔断是业务需求吗,既然不是,为什么springCloude的开发中,微服务的代码却要揉入熔断器的开发代码;别扭吧;这就是ServiceMesh为什么会是未来的原因。

中国联通与腾讯新设合营企业正推进中对当前经营无重大影响视频加载中昨天(11月2日),联通与腾讯将共同设立混改新公司的消息引发市场关注和热议。对此,昨晚,中国联通发布公告称基于公司全面挺进数字经济的战略需要,公司下属子公司联通创新创业投穿越时空隧道,对话古代历史,触摸世界文化精髓在浩瀚的历史长河中,有无数文明像澎湃的巨浪激荡着历史的天空,而不同国家不同地区不同民族都在不同历史时期创造了各具特色多姿多彩的文明。古代中国十二十时辰(庄亦杰著)古雅典二十四小时(明朝最有趣的官职名太子洗马,古代人也经常读错他注喜欢历史的点点关注明朝三杨之一的内阁名相杨溥曾任东宫太子洗马,估计很多人会说原来杨溥还给太子洗过马。不但现在人这么认为,即使在当时的明朝一些地方小官员,还嘲笑洗马一职为洗马的官。冀南一县志中记载的古代县令,为何元朝以前仅18位,明清则近百位这两天网络有篇雍正年馆陶县志卷之卷之四职官志县令的文章,把雍正年间编撰的馆陶县志中职官志县令一篇所记载,自三国曹魏至清朝雍正十三年的馆陶县令名字发表出来。元代之前的馆陶县令读者看到揭秘古代的青楼女子们都有哪些看家吃饭的本事?妓女这一行业从春秋的时候就已经有了,管仲设置了女闾,从此妓院的招牌就挂在了历史的大墙上。这个行业,在历史中有很多祸国祸民的罪妓女这一行业从春秋的时候就已经有了,管仲设置了女闾,从此古代打仗统计的战功靠谱吗?古代打仗统计的战功靠谱吗?那是相当不靠谱,比如明武宗亲征应州大捷,还亲手斩杀敌军一员武将,一战让鞑靼数十年不敢入境,听到这里,连内行人都直呼牛掰。然而实际情况是,十万人在应州厮杀一才2集卫视收视第一,王志文令观众成功入坑,北京卫视拿到了王牌还记得黑冰青瓷这些经典悬疑剧吗?它们质感出色尺度惊人,一个个暗黑名场面接连出现,至今仍让人印象深刻。而这些剧集中都有一个核心演员王志文。无论怎样破尺度的剧情,什么高难度的角色,只要小儿降燥一定要喝的南杏玉竹水经常听别人讲,秋燥。那秋燥究竟是什么呢?其实就是秋天这个季节缺乏水分,秋风一吹,皮肤又干,喉咙又干,鼻子又干。尤其是小孩子,这个时候鼻子最容易流点红色东西出来。南杏仁今天我就教大家唐朝长安叫胡姆丹?你没听错,古代外国人都这么叫之华说史,史说自话。欢迎大家关注我,一起谈古论今,纵论天下大势。长安,一个人类文明史上极其诱人的历史名字。长久平安,长世泰安,长乐永安,长生养安,长年心安,等等,无论用汉语怎样诠释抗日少女杨岭梅为了信念,遭七天七夜酷刑宁死不屈1940年4月30日,凌晨3点,一个汉奸带领着一队日本鬼子突然闯进了河北省晋县南田村,整个村庄静悄悄的,村民们还都在睡梦中,危险即将来临,他们还都不知道。此时,驻扎在村子中的八路军谷爱凌疑似有新恋情!公开怀抱白人卷发帅哥,勾肩搭背亲密无间随着我国整体实力不断提高,体育领域也在飞速进步,很多优秀的外国运动员都纷纷归化中国,而目前看来,其中归化最成功的当属滑雪天才少女谷爱凌,已经拿到了所有世界大赛冠军,堪称中国冰雪第一
第84章节。那陵格勒之古镇进了河口,咫尺之行,透过呗壁,迟暮阳叹道,这哪里是一条暗河,显然是一座深水船坞,人为雕琢的迹象额外明显,下可蹑影潜踪,上可蒙冲斗舰,尤其此处,正是那山峰底下,如桃花潭水深千尺,足可2023年12星座开运地点出炉12星座的人如想在2023年增加恋爱运和工作运,可以选择造访哪些地方?牡羊座新开的餐厅景点2023年的牡羊座在新的一年将会带来好运,可前往新开幕的餐厅风景区等等,并穿着红色的衣物效东海岸有一个海岛,历史上曾经是名扬海外千年不衰的海盗窝看到旅游团的行程单上要参观一个名叫蛇蟠岛的海盗窝,据说是国内唯一一个以海盗为主题的海岛洞窟景区,已勾起了大家的好奇心。参观后,无一不认同名副其实。蛇蟠岛位于浙江台州市三门县,因盛产小天鹅来越冬啦!一起来看波光潋滟天鹅湖北方气温骤降,大批候鸟南下越冬,位于东亚澳大利西亚鸟类迁徙路线中部的上海九段沙湿地国家级自然保护区再次迎来了阔别半年多的老朋友小天鹅。小天鹅来越冬啦!小天鹅(学名Cygnuscol广东珠海隐藏一个马尔代夫,景色优美少人知道,你去过吗?提起度假旅游,很多人想到马尔代夫毛里求斯夏威夷留尼汪巴厘岛,还有我国的三亚,其实广东也有媲美马尔代夫的度假胜地,它就是位于珠海市的东澳岛,岛上只有400多个居民,保留了相对原始的离组图鹤峰无限风光在险峰湖北日报客户端讯(通讯员肖琴向冰舟)12月14日,在鹤峰县容美镇屏山上空俯拍,层峦叠嶂沟壑纵横,山川奇特,且山环水复。地缝绝壁峰丛洞穴等地质景观一应俱全,这里断崖突起,绝壁陡立,姿来到曼谷(1)当早晨第一缕阳光从没有关严的落地窗帘中透入室内,我很开心地又想到那句话来到泰国,我赚了一个小时的青春。昨天吉隆坡国际机场一点多的飞机,到曼谷是三点五十多,打开手机一会儿,显示两点五云南省打造产值超千亿元核桃全产业链云南网讯(记者胡晓蓉)近日,省林业和草原局印发云南省核桃产业高质量发展三年行动方案(20232025年),全面促进云南核桃产业结构优化升级,提升产业发展质量效益和竞争力,把云南核桃CAAI名誉理事长李德毅机器如何像人一样认知机器的生命观如果上一代人工智能可以叫做计算机智能,硬核是算力算法和数据的话,那么新一代人工智能应该是有感知有认知有行为可交互会学习自成长的机器智能,其硬核是交互学习和记忆,而量子认知机的落地应一加11还有流浪地球联名款?行星发动机版未发先火,期待值已拉满最近电影业又开始好起来了,目前阿凡达2水之道正在热播,不知道有多少小伙伴已经看过了呢?该影片的全球首周票房已经陆续出炉,全球累积票房已超过4。345亿美元,看看后续能不能超过票房神长沙周边自驾游12条景点线路攻略推荐路线推荐三天四晚,如果觉得太长也可以只选取其中一段路线前往游玩,这12条线路不管是房车游,还是自驾游都十分合适。旅行是一种追寻,尽可能地去更多的地方,寻找不一样的新鲜与感动旅行是一
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网