|
该版本仍在开发中,尚未被视为稳定。最新稳定版本请使用Spring Cloud Commons 5.0.0! |
春季云断路器
Spring Cloud 断路器提供了跨不同断路器实现的抽象。 它提供了一个统一的API,供你的应用使用,让你作为开发者选择最适合你应用需求的断路器实现。
核心概念
要在代码中创建断路器,你可以使用断路器工厂应用程序接口。当你在类路径中包含 Spring Cloud Circuit Breaker Starters时,会自动为你创建一个实现该 API 的 bean。
以下示例展示了如何使用该 API 的一个简单示例:
@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.createAPI 创建一个名为断路器.
这执行方法取提供商以及一个功能.
这提供商是你要用断路器包裹的代码。
这功能是断路器跳闸时运行的后备。
该函数传递给可投掷这导致了备用系统被触发。
如果你不想提供备份,也可以选择排除。
响应式代码中的断路器
如果Project Reactor在类路径上,你也可以使用响应式断路器工厂针对你的响应式代码。
以下示例展示了如何实现:
@Service
public static class DemoControllerService {
private ReactiveCircuitBreakerFactory cbFactory;
private WebClient webClient;
public DemoControllerService(WebClient webClient, ReactiveCircuitBreakerFactory cbFactory) {
this.webClient = webClient;
this.cbFactory = cbFactory;
}
public Mono<String> slow() {
return webClient.get().uri("/slow").retrieve().bodyToMono(String.class).transform(
it -> cbFactory.create("slow").run(it, throwable -> return Mono.just("fallback")));
}
}
这响应式断路器工厂.createAPI 创建一个名为响应式断路器.
这执行方法取单或者通量然后用断路器包裹起来。
你可以选择性地设置一个备选方案功能当断路器跳闸并被可投掷这导致了失败。
配置
你可以通过创建 Beans 来配置断路器定制器.
这定制器接口只有一种方法(称为自定义) 后取对象可以定制。
关于如何定制特定实现的详细信息,请参见 以下文献资料:
一些断路器实现方式包括韧性4JCircuitBreaker叫自定义每次都用方法断路器#运行被叫去。
这可能效率低下。那你可以使用断路器#一次方法。它在呼叫时非常有用自定义很多时候都说不通,
例如,在吞噬Resilience4j事件的情况下。
以下示例展示了每种方法的具体方法io.github.resilience4j.circuitbreaker.CircuitBreaker去消费事件。
Customizer.once(circuitBreaker -> {
circuitBreaker.getEventPublisher()
.onStateTransition(event -> log.info("{}: {}", event.getCircuitBreakerName(), event.getStateTransition()));
}, CircuitBreaker::getName)