热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用YAML配置Resilience4J的CircuitBreaker

本文探讨了Resilience4j作为现代Java应用程序中不可或缺的容错工具,特别介绍了如何通过YAML文件配置CircuitBreaker以提高服务的弹性和稳定性。

利用YAML配置Resilience4J的Circuit Breaker


简介


Resilience4j是一款专为Java 8及函数式编程设计的轻量级容错库,它的设计理念受到了Netflix Hystrix的启发,但在Spring Cloud 2020版本更新后,由于Hystrix被官方弃用,Resilience4j成为了推荐的熔断与限流解决方案。


主要功能



Resilience4j提供了一系列强大的功能来帮助开发者构建更加健壮的应用程序,包括但不限于Circuit Breaker(熔断器)、Retry(重试机制)、Bulkhead(隔离策略)等。


配置挑战


在实际应用过程中,许多开发者遇到了配置Circuit Breaker时无法正确读取YAML文件中设定的参数的问题。经过多次尝试,这里分享一个能够有效读取YAML配置的方法,确保熔断器按预期工作。


resilience4j.circuitbreaker:
configs: # 公共配置
default: # 熔断器默认配置
failureRateThreshold: 20 # 失败率阈值
slowCallDurationThreshold: 60s # 慢调用持续时间阈值
slowCallRateThreshold: 90 # 慢调用率阈值
slidingWindowSize: 90 # 状态滚动窗口大小
slidingWindowType: COUNT_BASED # 状态收集器类型
minimumNumberOfCalls: 10 # 计算错误率的最小请求数
automaticTransitionFromOpenToHalfOpenEnabled: false # 是否自动转换到半开状态
permittedNumberOfCallsInHalfOpenState: 10 # 半开状态下允许的最大调用次数
waitDurationInOpenState: 60s # 打开状态转为半开状态的等待时间
eventConsumerBufferSize: 10 # 事件缓冲区大小
recordExceptions: [java.lang.Exception] # 被记录为失败的异常列表
ignoreExceptions: [java.lang.IllegalStateException] # 不被记录为失败的异常列表
instances: # 特定熔断器实例配置
aCustomizer: # 使用默认配置
baseConfig: default
cacheCustomizer: # 自定义配置
failureRateThreshold: 10

@Bean
@Primary
public Resilience4JCircuitBreakerFactory resilience4jCircuitBreakerFactory() {
Resilience4JCircuitBreakerFactory factory = new Resilience4JCircuitBreakerFactory();
factory.configureDefault(
id -> new Resilience4JConfigBuilder(id)
.circuitBreakerConfig(
circuitBreakerRegistry.circuitBreaker("aCustomizer").getCircuitBreakerConfig()
)
.timeLimiterConfig(
new TimeLimiterConfig.Builder()
.timeoutDuration(Duration.ofSeconds(4))
.cancelRunningFuture(true)
.build()
)
.build());
return factory;
}

项目源码


如需查看完整示例代码,请访问:项目GitHub链接


支持作者


如果您觉得本教程对您有所帮助,欢迎通过下方二维码对作者表示支持,您的支持将鼓励更多优质内容的产生。



推荐阅读
author-avatar
寒空动烟雪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有