Spring Cloud 断路器3.1.2

简介

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 Initializr

快速入门您的项目

领先一步

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

了解更多

获得支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

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

查看全部