spring cloud circuit breaker文档阅读

This commit is contained in:
2023-04-21 15:29:31 +08:00
parent 6e7fd59764
commit e5b607eb9d

View File

@@ -20,3 +20,81 @@ public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer() {
``` ```
### 自定义ExecutorService ### 自定义ExecutorService
如果想要自定义执行circuit breaker的`ExecutorService`可以通过Resilience4JCircuitBreakerFactor来指定。 如果想要自定义执行circuit breaker的`ExecutorService`可以通过Resilience4JCircuitBreakerFactor来指定。
例如想要指定一个context aware ExecutorService可以按如下所示
```java
@Bean
public Customizer<ReactiveResilience4JCircuitBreakerFactory> defaultCustomizer() {
return factory -> {
ContextAwareScheduledThreadPoolExecutor executor = ContextAwareScheduledThreadPoolExecutor.newScheduledThreadPool().corePoolSize(5)
.build();
factory.configureExecutorService(executor);
};
}
```
### 指定Circuit Breaker 配置
类似为所有Circuit Breakers指定默认配置也能以如下方式为特定Circuit Breaker指定配置
```java
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> 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
```