close

弹簧云断路器

介绍

Spring Cloud断路器提供了跨不同断路器实现的抽象。它提供了可在您的应用程序中使用的一致的API,使开发人员可以选择最适合您的应用程序需求的断路器实现。

核心概念

要在代码中创建断路器,可以使用CircuitBreakerFactoryAPI。当您在类路径中包含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.createAPI将创建一个名为的类的实例CircuitBreaker。该run方法采用SupplierFunction。这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.createAPI将创建一个名为的类的实例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

SpringInitializr

快速启动您的项目

使用 Spring Initializr引导您的应用程序 。

文献资料

每个Spring项目都有自己的项目。它详细说明了如何使用项目功能以及使用它们可以实现的功能。
2.0.1 当前 GA 参考文件
2.0.2- 快照 参考文件
1.0.6.BUILD-SNAPSHOT 快照 参考文件
1.0.5.RELEASE GA 参考文件

可以尝试一些示例: