# 配合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());
}*/
}