简介
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链接。
支持作者
如果您觉得本教程对您有所帮助,欢迎通过下方二维码对作者表示支持,您的支持将鼓励更多优质内容的产生。