Spring Cloud Circuit BreakerSpring Cloud 断路器5.0.0

简介

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 和一个 FunctionSupplier 是您将包装在断路器中的代码。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 方法接受一个 MonoFlux 并将其包装在断路器中。您可以选择提供一个回退 Function,该函数将在断路器跳闸时被调用,并将传递导致失败的 Throwable

Spring Boot 配置

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

Spring Initializr

快速启动您的项目

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有