标签:cti mave 请求 默认 class 很多 创建 这一 熔断器
Hystrix已经停止开发,官方推荐替代项目Resilience4j简介导读:随着微服务的流行,熔断作为其中一项很重要的技术也广为人知。当微服务的运行质量低于某个临界值时,启动熔断机制,暂停微服务调用一段时间,以保障后端的微服务不会因为持续过负荷而宕机。本文介绍了新一代熔断器Resilience4j如何使用。
译者注:Hystrix官方已经停止开发了,Hystrix官方推荐使用新一代熔断器作为Resilience4j。作为新一代的熔断器,Resilience4j有很多优势,比如依赖少,模块化程度较好等优势。本文是关于resilience4j的初学者指南。
resilience4j是受Hystrix启发而做的熔断器,通过管理远程调用的容错处理来帮助实现一个健壮的系统。resilience4j提供了更好用的API,并且提供了很多其他功能比如Rate Limiter(限流器),Bulkhead(舱壁隔离)。
设置Maven
添加依赖如下:
这里仅仅添加了熔断器模块,其他模块可以点击这里[1]。
熔断器
使用这部分功能,需要引入上文所述的依赖。熔断器模式可以帮助我们在远程服务出故障时防止故障级联。
在多次请求失败后,我们就认为服务不可用/超载,并且对之后的请求进行短路处理,这样我们就能节约系统资源。
我们看看resilience4j如何做到这一点。
首先需要定义使用的设置,我们先使用默认设置:
当然你也可以自定义一些参数:
这里我们设置ratethreshold为20%,最小5次重试。
然后我们创建一个熔断器对象,并调用远程服务:
通过junit进行测试,我们会调用服务10次,可以验证服务至少调用5次,如果有20%的失败的情况下,会停止调用。
熔断器状态及设置
熔断器有三种可能状态:
限流器
这里需要引入resilience4j-ratelimiter[2]依赖。可以允许限制对某些服务的访问。
所有对decorateFunction的调用都符合rate limiter.
我们可以配置参数如下:
舱壁隔离
这里需要引入resilience4j-bulkhead[3]依赖。可以限制对特定服务的并发调用数。
让我们看一个使用Bulkhead API配置并发调用的示例:
为了测试,我们可以调用一个mock服务的方法。这种情况下,我们就不允许其他调用:
我们可以做如下设置:
重试
需要引入resilience4j-retry[4]库。可以在调用失败后自动重试:
现在我们模拟远程调用失败,并确认自动重试:
我们可以做如下设置:
缓存
cache模块需要引入resilience4j-cache[5]依赖。初始化代码与众不同:
这里的缓存是通过使用的JSR-107 Cache实现完成的,Resilience4j提供了使用缓存的方法。
请注意,没有用于装饰功能的API(如Cache.decorateFunction(Function)),API仅支持Supplier和Callable类型。
限时器
该模块需要引入resilience4j-timelimiter[6]依赖。可以使用TimeLimiter限制调用远程服务所花费的时间。
我们设置超时时间为1毫秒的TimeLimiter:
使用Future.get()验证是否如预期超时:
可以和熔断器组合使用:
附加模块
Resilience4j还提供了许多附加模块,可以简化与流行框架和库的集成。
一些比较知名的集成是:
结论
在本文中,我们了解了Resilience4j库的不同方面,并学习了如何使用它来解决服务器间通信中的各种容错问题。源代码和更多示例可以在这里[5]找到。
文中链接:
[1]https://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22io.github.resilience4j%22
[2]https://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22resilience4j-ratelimiter%22
[3]https://search.maven.org/classic/#search%7Cga%7C1%7Cresilience4j-bulkhead
[4]https://search.maven.org/classic/#search%7Cga%7C1%7Cresilience4j-retry
[5]https://search.maven.org/classic/#search%7Cga%7C1%7Cresilience4j-cache
[6]https://search.maven.org/classic/#search%7Cga%7C1%7Cresilience4j-timelimiter
[7]https://github.com/eugenp/tutorials/tree/master/libraries
原文地址:
https://www.baeldung.com/resilience4j
本文作者baeldung,由方圆翻译。转载本文请注明出处,欢迎更多小伙伴加入翻译及投稿文章的行列,详情请戳公众号菜单「联系我们」。
参考阅读:
技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。转载请注明来自高可用架构「ArchNotes」微信公众号及包含以下二维码。
Hystrix已经停止开发,官方推荐替代项目Resilience4j简介
标签:cti mave 请求 默认 class 很多 创建 这一 熔断器
原文地址:https://blog.51cto.com/14977574/2546701