Spring Cloud 斷路器3.1.2

簡介

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

支援的實作

核心概念

要在您的程式碼中建立斷路器,您可以使用 CircuitBreakerFactory API。當您在類別路徑中包含 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 是斷路器跳閘時將會執行的回退。 函數將會傳遞導致回退被觸發的 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 社群中所有即將到來的活動。

檢視全部