分享好友 看资讯首页 频道列表
使用spring boot + resilience 4j实现断路器
2024-05-13 08:29    8331 来源:今日头条

resilience 4j提供以下功能。

断路器

ratelimiter

舱壁

重试

高速缓存

timelimiter

如果您打算在spring boot中使用它,可以使用starter。请注意,spring boot 1.x和2.x系列之间的artifactid似乎有所不同。另外,上面只包含circuitbreaker和ratelimiter,在使用其他功能时需要单独添加依赖项。(由于未准备好autoconfigure,您还需要自己定义bean。)

这次我将总结如何在spring boot 2.x系列中使用circuitbreaker和ratelimiter。

环境

jdk 8

spring boot 2.1.2.release

resilience 4j 0.13.2

断路器

当某些具有微服务的服务发生故障时,可以临时阻止对故障服务的访问并防止故障传播。

circuitbreaker有三种状态:closed,open,halfopen。如果是正常的,则它是关闭的,如果处理失败超过一定数量,它将变为打开并且访问被阻止。当在打开状态下经过一段时间后,进入halfopen状态。如果处理在halfopen状态下失败超过一定量,则返回到关闭状态。

在resilience 4j中,处理的成功和失败由环形缓冲器ring bit buffer管理,并且当缓冲器中的故障数超过设定的速率时,状态转变。

断路器使用状态中的ring bit buffer closed来存储呼叫的成功或失败状态。成功的呼叫存储为0位,失败的呼叫存储为1位。ring bit buffer具有(可配置的)固定大小。环位缓冲区在内部使用类似数据结构的bitset来存储与布尔数组相比节省内存的位。bitset使用long []数组来存储这些位。这意味着bitset只需要一个包含16个长(64位)值的数组来存储1024个调用的状态。

例如,如果环形缓冲区的大小为10,则必须至少评估10个调用,然后才能计算故障率。如果仅评估了9个呼叫,即使所有9个呼叫都失败,断路器也不会打开。

用于closed - >; open和halfopen - >; closed判断的环形缓冲区是不同的,可以定义大小,但使用相同的判断条件(错误率)。

在持续关闭时间结束后,断路器状态从open更改为half_open并允许调用以查看后端是否仍然不可用或已再次可用。

断路器使用另一个(可配置的)环位缓冲区来评估half_open状态中的故障率。如果故障率高于配置的阈值,则状态将更改回open。如果故障率低于或等于阈值,则状态变回closed。

此外,处理的成功和失败由异常判断。默认情况下,如果任何异常抛出异常,则会将其视为处理失败,但您也可以指定要将其视为失败的条件。

设置

application.yml你可以设置定义多个断路器。

如果你想只考虑一个特定的异常和故障使用recordexceptions,当你不想忽视特定的异常时使用ignoreexceptions。

有两种方法可以使用spring aop并在函数中实现它。无论哪种实现,如果circuit处于open状态,它将生成circuitbreakeropenexception。

在以下实现示例中,为简单起见,它不是微服务。最初resttemplate,我认为这将是service class 调用其他服务api等使用等的过程。

spring aop实现

通过@circuitbreaker(name = "hogehoge")注释到类或方法上则可以启用断路器。如果在类指定这个注释,则为所有公共方法启用断路器。

如何写业务函数?

调用端使用断路器的decorate~方法修饰要调用的方法。

后备处理

接下来,如果发生故障,执行回退过程怎么办?在hystrix 的情况下,通过指定@hystrixcommand("hogemethod"),由于resilience4j没有设置的这样的功能,必须自己实现。

ratelimiter

您可以限制每单位时间的执行次数。

单位时间是一个周期,并且可以在一个周期中执行的数量是有限的。如果它超过了可以在一个循环中执行的上限,则让它等待,如果等待时间超过超时时间,则发生requestnotpermitted。

在application.yml可以定义多个ratelimiter。

它与断路器实现方式相同,有两种方法可以使用spring aop并在业务函数中编写它。实现方法也类似于断路器。

调用者不用考虑任何事情,只需执行该方法即可。

函数方法:

后备处理,与断路器一样,没有自动执行回退处理的机制,因此您需要自己实现它。

单位时间为5秒,超时时间为1秒,每单位时间的执行次数为1。如果同时发送多个请求,则会发出失败请求。(如果您同时请求三个,则至少一个将始终失败。)

写在最后:

欢迎留言讨论,如需java方面的架构资料,我这里刚好有一份,怎么领取→→→关注+转发 然后私信“架构资料” 即可领取

来源:今日头条

以上是网络信息转载,信息真实性自行斟酌。

版权/免责声明:
一、本文图片及内容来自网络,不代表本站的观点和立场,如涉及各类版权问题请联系及时删除。
二、凡注明稿件来源的内容均为转载稿或由企业用户注册发布,本网转载出于传递更多信息的目的;如转载稿涉及版权问题,请作者联系我们,同时对于用户评论等信息,本网并不意味着赞同其观点或证实其内容的真实性。
三、转载本站原创文章请注明来源:中华厨具网

免责声明:

本站所有页面所展现的企业/商品/服务内容、商标、费用、流程、详情等信息内容均由免费注册用户自行发布或由企业经营者自行提供,可能存在所发布的信息并未获得企业所有人授权、或信息不准确、不完整的情况;本网站仅为免费注册用户提供信息发布渠道,虽严格审核把关,但无法完全排除差错或疏漏,因此,本网站不对其发布信息的真实性、准确性和合法性负责。 本网站郑重声明:对网站展现内容(信息的真实性、准确性、合法性)不承担任何法律责任。

温馨提醒:中华厨具网提醒您部分企业可能不开放加盟/投资开店,请您在加盟/投资前直接与该企业核实、确认,并以企业最终确认的为准。对于您从本网站或本网站的任何有关服务所获得的资讯、内容或广告,以及您接受或信赖任何信息所产生之风险,本网站不承担任何责任,您应自行审核风险并谨防受骗。

中华厨具网对任何使用或提供本网站信息的商业活动及其风险不承担任何责任。

中华厨具网存在海量企业及店铺入驻,本网站虽严格审核把关,但无法完全排除差错或疏漏。如您发现页面有任何违法/侵权、错误信息或任何其他问题,请立即向中华厨具网举报并提供有效线索,我们将根据提供举报证据的材料及时处理或移除侵权或违法信息。