领先一步
VMware 提供培训和认证,助您加速前进。
了解更多Spring Cloud 断路器为不同的断路器实现提供了抽象。它提供了一致的 API 供您在应用程序中使用,让开发者可以选择最适合其应用程序需求的断路器实现。
要在代码中创建断路器,可以使用 CircuitBreakerFactory
API。当您在 classpath 中包含 Spring Cloud Circuit Breaker starter 时,一个实现此 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.create
API 将创建一个名为 CircuitBreaker
的类的实例。run
方法接受一个 Supplier
和一个 Function
。Supplier
是您要封装在断路器中的代码。Function
是在断路器跳闸时将执行的备用逻辑 (fallback)。该函数将接收导致备用逻辑触发的 Throwable
。如果不需要提供备用逻辑,可以选择不包含它。
如果 Project Reactor 在 classpath 中,您也可以将 ReactiveCircuitBreakerFactory
用于您的反应式代码。
@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")));
}
}
ReactiveCircuitBreakerFactory.create
API 将创建一个名为 ReactiveCircuitBreaker
的类的实例。run
方法接受一个 Mono
或 Flux
并将其封装在断路器中。您可以选择性地提供一个备用逻辑 (fallback) Function
,该函数将在断路器跳闸时被调用,并会传入导致失败的 Throwable
。
以下 starter 可通过 Spring Cloud BOM 获取
Resilience4J - org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j
反应式 Resilience4J - org.springframework.cloud:spring-cloud-starter-circuitbreaker-reactor-resilience4j
Spring Retry - org.springframework.cloud:spring-cloud-starter-circuitbreaker-spring-retry