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()); }*/ }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
· 开源的 DeepSeek-R1「GitHub 热点速览」
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 揭秘 Sdcb Chats 如何解析 DeepSeek-R1 思维链
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
2020-02-12 spring-security
2019-02-12 设计模式研究