要在代码中创建断路器,可以用API。当你在类路径中加入 Spring Cloud Circuit Breaker 启动程序时,实现该 API 的 Bean 会自动为你创建。下面给出了一个非常简单的使用该API示例CircuitBreakerFactory
@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");
}
}
该 API 会创建一个名为 的类实例。该方法将 a 和 a 取 。这是你要用断路器包裹的代码。这是断路器跳闸时执行的备用方案。函数会传递导致回退触发的函数。如果你不想提供备份,也可以选择排除。CircuitBreakerFactory.createCircuitBreakerrunSupplierFunctionSupplierFunctionThrowable
@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")));
}
}
该 API 会创建一个名为 的类实例。该方法用 or 包裹在断路器中。你可以选择设置一个缓冲方案,如果断路器跳闸就会调用,并会通过导致故障的路径。ReactiveCircuitBreakerFactory.createReactiveCircuitBreakerrunMonoFluxFunctionThrowable