ToB企服应用市场:ToB评测及商务社交产业平台

标题: Resilience4J通过yml设置circuitBreaker [打印本页]

作者: 罪恶克星    时间: 2022-10-20 14:53
标题: Resilience4J通过yml设置circuitBreaker
介绍

Resilience4j是一个轻量级、易于使用的容错库,其灵感来自Netflix Hystrix,但专为Java 8和函数式编程设计。
springcloud2020升级以后Hystrix被官方移除,Resilience4目前是官方推荐的熔断限流方案。
核心组件


相关问题

按照网上很多文章进行熔断器配置,发现并不能读取配置中的参数,走的还是Resilience4J中CircuitBreakerConfig默认的参数。通过测试实现了一种能读取yml中断路器配置的方案
  1. resilience4j.circuitbreaker:
  2.   configs: #通用配置
  3.     default: # 断路器系统默认配置
  4.       #失败率,错误率达到或高于该值则进入open状态
  5.       failureRateThreshold: 20
  6.       #慢调用阀值,请求执行的时间大于该值时会标记为慢调用
  7.       slowCallDurationThreshold: 60s
  8.       #慢调用熔断阀值,当慢调用率达到或高于该值时,进入open状态
  9.       slowCallRateThreshold: 90
  10.       #状态滚动收集器大小,close状态时收集多少请求状态,用于计算失败率。
  11.       slidingWindowSize: 90
  12.       #状态收集器类型
  13.       #COUNT_BASED:根据数量计算,slidingWindowSize为次数
  14.       #TIME_BASED:根据时间计算,slidingWindowSize为秒数
  15.       slidingWindowType: COUNT_BASED
  16.       #计算错误率的最小请求数,不足最小调用次数不会触发任何变化。
  17.       minimumNumberOfCalls: 10
  18.       #是否自动进入halfOpen状态,默认false-一定时间后进入halfopen,ture-需要通过接口执行。
  19.       automaticTransitionFromOpenToHalfOpenEnabled: false
  20.       #进入halfOpen状态时,可以被调用次数,就算这些请求的失败率,低于设置的失败率变为close状态,否则变为open。
  21.       permittedNumberOfCallsInHalfOpenState: 10
  22.       #open状态变为half状态需要等待的时间,即熔断多久后开始尝试访问被熔断的服务。
  23.       waitDurationInOpenState: 60s
  24.       #事件缓冲区大小??
  25.       eventConsumerBufferSize: 10
  26.       #被计为失败的异常集合,默认情况下所有异常都为失败。
  27.       recordExceptions:
  28.         - java.lang.Exception
  29.       #不会被计为失败的异常集合,优先级高于recordExceptions。
  30.       ignoreExceptions:
  31.         - java.lang.IllegalStateException
  32.   instances: #熔断器类型
  33.     aCustomizer: #使用默认配置
  34.       baseConfig: default
  35.     cacheCustomizer: #自定义配置
  36.       failureRateThreshold: 10
复制代码
  1.    @Bean
  2.     @Primary
  3.     public Resilience4JCircuitBreakerFactory resilience4jCircuitBreakerFactory() {
  4.         Resilience4JCircuitBreakerFactory factory = new Resilience4JCircuitBreakerFactory();
  5.         factory.configureDefault(
  6.                 id -> new Resilience4JConfigBuilder(id)
  7.                         .circuitBreakerConfig(
  8.                                 circuitBreakerRegistry.circuitBreaker("aCustomizer").getCircuitBreakerConfig()
  9.                         )
  10.                         .timeLimiterConfig(
  11.                                 new TimeLimiterConfig.Builder()
  12.                                         .timeoutDuration(Duration.ofSeconds(4))
  13.                                         .cancelRunningFuture(true)
  14.                                         .build()
  15.                         )
  16.                         .build());
  17.         System.out.println(factory);
  18.         return factory;
  19.     }
复制代码
源码

https://gitee.com/gustav0/resilience4-jdemo
赞赏一下吧~

如果解决了您的问题,可以赞赏支持一下,感谢大佬们。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4