领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多Spring Cloud 断路器提供了跨不同断路器实现的抽象。它提供了一个可在应用程序中使用的统一 API,允许您(开发人员)选择最适合您的应用程序需求的断路器实现。
要在代码中创建断路器,可以使用CircuitBreakerFactory
API。当您在类路径中包含 Spring Cloud 断路器启动器时,将自动为您创建一个实现此 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
,如果断路器跳闸,则将调用此函数,并将传递导致故障的Throwable
。
使用以下方法引导您的应用程序 Spring Initializr.