From e5b607eb9dd4f1110a1efcca8a23c0a8b2f290b3 Mon Sep 17 00:00:00 2001 From: Rikako Wu <496063163@qq.com> Date: Fri, 21 Apr 2023 15:29:31 +0800 Subject: [PATCH] =?UTF-8?q?spring=20cloud=20circuit=20breaker=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E9=98=85=E8=AF=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Spring Cloud Circuit Breaker.md | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/spring/Spring Cloud/Spring Cloud Circuit Breaker.md b/spring/Spring Cloud/Spring Cloud Circuit Breaker.md index 7541639..ea35c51 100644 --- a/spring/Spring Cloud/Spring Cloud Circuit Breaker.md +++ b/spring/Spring Cloud/Spring Cloud Circuit Breaker.md @@ -20,3 +20,81 @@ public Customizer defaultCustomizer() { ``` ### 自定义ExecutorService 如果想要自定义执行circuit breaker的`ExecutorService`,可以通过Resilience4JCircuitBreakerFactor来指定。 +例如,想要指定一个context aware ExecutorService,可以按如下所示: +```java +@Bean +public Customizer defaultCustomizer() { + return factory -> { + ContextAwareScheduledThreadPoolExecutor executor = ContextAwareScheduledThreadPoolExecutor.newScheduledThreadPool().corePoolSize(5) + .build(); + factory.configureExecutorService(executor); + }; +} +``` +### 指定Circuit Breaker 配置 +类似为所有Circuit Breakers指定默认配置,也能以如下方式为特定Circuit Breaker指定配置: +```java +@Bean +public Customizer slowCustomizer() { + return factory -> factory.configure(builder -> builder.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults()) + .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(2)).build()), "slow"); +} +``` +### Circuit Breaker属性配置 +可以在配置文件中指定`CircuitBreaker`和`TimeLimiter`配置,配置文件中指定的配置比Customizer中指定的配置优先级更高。 +优先级从上到下递减: +- 方法级别(id)配置 - 针对指定的方法或操作 +- service级别(group)配置 - 针对指定应用的service或操作 +- 全局默认配置 + +#### 全局默认 +```yml +resilience4j.circuitbreaker: + configs: + default: + registerHealthIndicator: true + slidingWindowSize: 50 + +resilience4j.timelimiter: + configs: + default: + timeoutDuration: 5s + cancelRunningFuture: true +``` +#### Configs Properties Configuration +```yml +resilience4j.circuitbreaker: + configs: + groupA: + registerHealthIndicator: true + slidingWindowSize: 200 + +resilience4j.timelimiter: + configs: + groupC: + timeoutDuration: 3s + cancelRunningFuture: true +``` +#### 实例属性设置 +```yml +resilience4j.circuitbreaker: + instances: + backendA: + registerHealthIndicator: true + slidingWindowSize: 100 + backendB: + registerHealthIndicator: true + slidingWindowSize: 10 + permittedNumberOfCallsInHalfOpenState: 3 + slidingWindowType: TIME_BASED + recordFailurePredicate: io.github.robwin.exception.RecordFailurePredicate + +resilience4j.timelimiter: + instances: + backendA: + timeoutDuration: 2s + cancelRunningFuture: true + backendB: + timeoutDuration: 1s + cancelRunningFuture: false +``` \ No newline at end of file