doc: 阅读spring cloud circuitBreaker文档
This commit is contained in:
@@ -42,6 +42,9 @@
|
|||||||
- [Create a TimeLimiterRegistry](#create-a-timelimiterregistry)
|
- [Create a TimeLimiterRegistry](#create-a-timelimiterregistry)
|
||||||
- [Create and configure TimeLimiter](#create-and-configure-timelimiter)
|
- [Create and configure TimeLimiter](#create-and-configure-timelimiter)
|
||||||
- [decorate and execute a functional interface](#decorate-and-execute-a-functional-interface-4)
|
- [decorate and execute a functional interface](#decorate-and-execute-a-functional-interface-4)
|
||||||
|
- [Spring Cloud CircuitBreaker](#spring-cloud-circuitbreaker)
|
||||||
|
- [core concepts](#core-concepts)
|
||||||
|
- [Configuration](#configuration)
|
||||||
|
|
||||||
|
|
||||||
# CircuitBreaker
|
# CircuitBreaker
|
||||||
@@ -928,3 +931,45 @@ String result = timeLimiter.executeFutureSupplier(
|
|||||||
|
|
||||||
当发生等待超时时,将会根据`shouldCancelRunningFuture`参数的配置来决定`是否针对尚未执行完成的future调用cancel`。
|
当发生等待超时时,将会根据`shouldCancelRunningFuture`参数的配置来决定`是否针对尚未执行完成的future调用cancel`。
|
||||||
|
|
||||||
|
## Spring Cloud CircuitBreaker
|
||||||
|
Spring Cloud Circuit Breaker提供了circuit breaker的抽象,可以让开发者自由选择circuit breaker的实现。目前,spring cloud支持如下circuit breaker的实现:
|
||||||
|
- Resilience4j
|
||||||
|
- Sentinel
|
||||||
|
- spring retry
|
||||||
|
|
||||||
|
### core concepts
|
||||||
|
可以通过`CircuitBreakerFactory` api来创建circuit breaker。在classpath中包含spring cloud circuit breaker starter时,将会自动创建实现了`CircuitBreakerFactory`的bean。如下示例展示了如何使用该api:
|
||||||
|
```java
|
||||||
|
@Service
|
||||||
|
public static class DemoControllerService {
|
||||||
|
private RestTemplate rest;
|
||||||
|
private CircuitBreakerFactory cbFactory;
|
||||||
|
|
||||||
|
public DemoControllerService(RestTemplate rest, CircuitBreakerFactory cbFactory) {
|
||||||
|
this.rest = rest;
|
||||||
|
this.cbFactory = cbFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String slow() {
|
||||||
|
return cbFactory.create("slow").run(() -> rest.getForObject("/slow", String.class), throwable -> "fallback");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
`CircuitBreakerFactory.create`方法将会创建一个`CircuitBreaker`的实例,run方法将会接收一个Supplier和一个Function:
|
||||||
|
- supplier是实际被封装在circuitbreaker中的方法
|
||||||
|
- function是circuit breaker被触发之后的fallback
|
||||||
|
- function接收一个Throwable,throwable为导致该fallback被触发的异常
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
可以通过创建`Customizer`类型的bean来配置circuit breaker。
|
||||||
|
|
||||||
|
在`Resilience4JCircuitBreaker`的实现中,每次调用`circuitbreaker#run`时,都会调用`Customizer#customize`方法,该行为可能会存在效率问题。故而,可以使用`Customizer#once`方法来创建Customizer,其会保证customizer中的逻辑最多只会被调用一次。
|
||||||
|
|
||||||
|
示例如下所示:
|
||||||
|
```java
|
||||||
|
Customizer.once(circuitBreaker -> {
|
||||||
|
circuitBreaker.getEventPublisher()
|
||||||
|
.onStateTransition(event -> log.info("{}: {}", event.getCircuitBreakerName(), event.getStateTransition()));
|
||||||
|
}, CircuitBreaker::getName)
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user