抢先一步
VMware 提供培训和认证,让您的进度如虎添翼。
了解更多Spring Cloud Circuit Breaker 提供了对不同断路器实现的抽象。它提供了一个一致的 API,可在应用程序中使用,允许开发者选择最适合其应用程序需求的断路器实现。
要在代码中创建断路器,可以使用 CircuitBreakerFactory
API。当在类路径上包含 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
是断路器跳闸时将执行的备用方案。该函数将传递导致触发备用方案的 Throwable
。如果不想提供备用方案,则可以选择将其排除在外。
如果类路径中存在 Project Reactor,则您还可以对响应式代码使用 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
,并将其包装在断路器中。您可以选择对回退 Function
进行分析,如果断路器跳闸,将调用该 Function
,并将导致故障的 Throwable
传递给它。
Spring Cloud BOM 中提供了以下启动器
Resilience4J - org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j
Reactive Resilience4J - org.springframework.cloud:spring-cloud-starter-circuitbreaker-reactor-resilience4j
Spring Retry - org.springframework.cloud:spring-cloud-starter-circuitbreaker-spring-retry
使用 Spring Initializr 自举您的应用程序。