弹簧云断路器
核心概念
要在代码中创建断路器,可以使用CircuitBreakerFactory
API。当您在类路径中包含Spring Cloud Circuit Breaker入门程序时,将自动为您创建实现此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 Boot配置
Spring Cloud BOM可使用以下入门工具
-
Hystrix-
org.springframework.cloud:spring-cloud-starter-netflix-hystrix
-
弹性4J-
org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j
-
反应弹性4J-
org.springframework.cloud:spring-cloud-starter-circuitbreaker-reactor-resilience4j
-
Spring重试-
org.springframework.cloud:spring-cloud-starter-circuitbreaker-spring-retry
-
哨兵-
org.springframework.cloud:spring-cloud-starter-circuitbreaker-sentinal