Resilience4J熔断

 

复制代码
# 配合feign
resilience4j:
  #熔断器
  circuitbreaker:
    instances:
      default:
        slidingWindowType: COUNT_BASED
        slidingWindowSize: 0
        minimumNumberOfCalls: 100
        failureRateThreshold: 50
        slowRateThreshold: 100
        slowStartDuration: 30s
        waitDuration: 6s
        permittedNumberOfCallsInHalfDuration: 100
        maxWaitDuration: 6s
        recordExceptions: TimeOutException,IOException,RuntimeException
  #限时器
  timelimiter:
    instances:
      default:
        timeoutDuration: 100s
        cancelRunningFuture: true
  #隔离器
  bulkhead:
    instances:
      default:
        bulkheadType: semaphore
        maxConcurrentCalls: 10000
        maxWaitDuration: 20s
  #限流器
  ratelimiter:
    instances:
      default:
        limitRefreshPeriod: 0.5s
        limitForPeriod: 100
        timeoutDuration: 15s
复制代码

 

复制代码
import org.springframework.context.annotation.Configuration;

@Configuration
public class Resilience4JConfig {

 /*   @Bean
    public Customizer<ReactiveResilience4JCircuitBreakerFactory> defaultCustomizer() {
        return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
                .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(4)).build())
                .circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
                .build());
    }
*/

 /*   @Bean
    public Customizer<ReactiveResilience4JCircuitBreakerFactory> defaultCustomizer(CircuitBreakerRegistry circuitBreakerRegistry) {
        return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
                .circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
                .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(5)).build()).build());
    }*/

    /*@Bean
    public ReactiveResilience4JCircuitBreakerFactory defaultCustomizer() {

        CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom() //
                .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.TIME_BASED) // 滑动窗口的类型为时间窗口
                .slidingWindowSize(10) // 时间窗口的大小为10秒
                .minimumNumberOfCalls(2) // 在单位时间窗口内最少需要2次调用才能开始进行统计计算
                .failureRateThreshold(50) // 在单位时间窗口内调用失败率达到50%后会启动断路器
                .enableAutomaticTransitionFromOpenToHalfOpen() // 允许断路器自动由打开状态转换为半开状态
                .permittedNumberOfCallsInHalfOpenState(5) // 在半开状态下允许进行正常调用的次数
                .waitDurationInOpenState(Duration.ofSeconds(5)) // 断路器打开状态转换为半开状态需要等待50秒
                .recordExceptions(Throwable.class) // 所有异常都当作失败来处理
                .build();

        ReactiveResilience4JCircuitBreakerFactory factory = new ReactiveResilience4JCircuitBreakerFactory();
        factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
                .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofMillis(200)).build())
                .circuitBreakerConfig(circuitBreakerConfig).build());

        return factory;
    }*/

   /* CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
            .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
            .slidingWindowSize(3)       //滑动时间窗口大小

            .minimumNumberOfCalls(3)     // 计算错误率时机: 熔断器关闭状态下,单位请求数达到10次,才开始计算错误率
            .failureRateThreshold(50)     // 熔断器关闭状态下,错误率阈值,50表示50%,超过就切换到全熔断状态

            .slowCallRateThreshold(100)
            .slowCallDurationThreshold(Duration.ofSeconds(30))

            .enableAutomaticTransitionFromOpenToHalfOpen()         // 开启自动化:自动从全熔断到半熔断
            .waitDurationInOpenState(Duration.ofSeconds(10))        // 全熔断状态,经过该10秒后进入半熔断状态

            .permittedNumberOfCallsInHalfOpenState(100)            // 半熔断状态,允许放行100个新请求
            .maxWaitDurationInHalfOpenState(Duration.ofSeconds(6)) // 半熔断状态,最大等待时间6秒

//            .recordExceptions(IOException.class, TimeoutException.class, FeignException.ServiceUnavailable.class) // 指定异常
//            .recordExceptions(Exception.class)

            .build();*/

    /*CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
            .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.TIME_BASED)  // 滑动窗口的类型为时间窗口
            .slidingWindowSize(60)        //时间窗口的大小为60秒

            .minimumNumberOfCalls(3)      // 在单位时间窗口内最少需要3次调用才能开始进行统计计算
            .failureRateThreshold(50)     // 在单位时间窗口内调用失败率达到50%后会启动断路器

            .slowCallRateThreshold(100)
            .slowCallDurationThreshold(Duration.ofSeconds(30))

            .enableAutomaticTransitionFromOpenToHalfOpen()          // 允许断路器自动由打开状态转换为半开状态
            .waitDurationInOpenState(Duration.ofSeconds(10))        // 断路器打开状态转换为半开状态需要等待10秒

            .permittedNumberOfCallsInHalfOpenState(5)              // 在半开状态下允许进行正常调用的次数
            .maxWaitDurationInHalfOpenState(Duration.ofSeconds(6)) // 半熔断状态,最大等待时间6秒

//            .recordExceptions(IOException.class, TimeoutException.class, FeignException.ServiceUnavailable.class) // 指定异常
            .recordExceptions(Exception.class)

            .build();
    TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
            .timeoutDuration(Duration.ofSeconds(3))
            .build();

    @Bean
    public Customizer<Resilience4JCircuitBreakerFactory> globalCustomConfiguration() {
        return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
                .timeLimiterConfig(timeLimiterConfig)
                .circuitBreakerConfig(circuitBreakerConfig)
                .build());
    }*/





}
复制代码

 

posted @ 2025-02-12 10:31  Peter.Jones  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
· 开源的 DeepSeek-R1「GitHub 热点速览」
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 揭秘 Sdcb Chats 如何解析 DeepSeek-R1 思维链
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
历史上的今天:
2020-02-12 spring-security
2019-02-12 设计模式研究
点击右上角即可分享
微信分享提示