Spring Cloud Circuit BreakerSpring Cloud 斷路器3.2.1

簡介

Spring Cloud 斷路器為不同的斷路器實現提供了抽象。它提供了一致的 API 供您在應用程式中使用,讓開發者可以選擇最適合其應用程式需求的斷路器實現。

支援的實現

核心概念

要在程式碼中建立斷路器,可以使用 CircuitBreakerFactory API。當您在 classpath 中包含 Spring Cloud Circuit Breaker starter 時,一個實現此 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 是在斷路器跳閘時將執行的備用邏輯 (fallback)。該函式將接收導致備用邏輯觸發的 Throwable。如果不需要提供備用邏輯,可以選擇不包含它。

反應式程式碼中的斷路器

如果 Project Reactor 在 classpath 中,您也可以將 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 並將其封裝在斷路器中。您可以選擇性地提供一個備用邏輯 (fallback) Function,該函式將在斷路器跳閘時被呼叫,並會傳入導致失敗的 Throwable

Spring Boot 配置

以下 starter 可透過 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 社群所有即將舉行的活動。

檢視全部