介紹Spring Cloud斷路器
當使用微服務架構來構建我們的應用程式時,在服務中最終會得到一個非常複雜的依賴樹。如果依賴關係樹中的服務遇到導致其開始緩慢響應的問題,則最終會形成一系列問題,這些問題會使依賴關係樹級聯起來。隨著越來越多的請求進入應用程式,等待慢速服務響應可能會消耗越來越多的資源。更糟糕的是,對慢速服務施加的額外負載可能會加劇問題。為了幫助減輕這些型別的級聯故障的影響,通常的做法是使用斷路器作為微服務應用的一部分。
Spring Cloud 允許開發人員使用Netflix Hystrix作為Spring Cloud Netflix專案的一部分,為其應用新增斷路器。除了Hystrix之外,Spring Cloud開發人員可能還想使用其他斷路器實現。為了幫助Spring Cloud開發人員以一致的方式為其應用程式新增斷路器,我們引入了Spring Cloud Circuit Breaker專案作為Spring Cloud孵化器的一部分。
Spring Cloud Circuit Breaker專案提供了一個抽象API,用於為您的應用新增斷路器。在本博文釋出時,有四種支援的實現:
要使用想要指定的實現,請將適當的啟動器新增到應用程式的類路徑中。
使用Spring Cloud斷路器
目前,Spring Cloud Circuit Breaker不是Spring Cloud BOM的一部分,僅釋出到我們的快照倉庫。您需要將我們的快照倉庫新增到Maven或Gradle檔案中。以下示例使用Maven:
<repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/libs-snapshot-local</url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>false</enabled> </releases> </repository> </repositories> |
接下來,您需要將Spring Cloud Circuit Breaker依賴項新增到您的應用程式中。同樣,以下示例使用Maven:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId> spring-cloud-starter-circuitbreaker-resilience4j </artifactId> <version>0.0.1.BUILD-SNAPSHOT</version> </dependency> </dependencies> |
Spring Cloud Circuit Breaker CircuitBreakerFactory根據應用程式類路徑上的啟動器自動配置實現。然後,您可以將此介面注入到所需的任何類中。以下示例顯示瞭如何執行此操作:
@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"); } } |
大多數實現還支援Reactive API。目前,Spring Retry是唯一的沒有反應式實現。如果要在斷路器中包含一些代反應式碼,則需要使用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 -> { CircuitBreaker cb = cbFactory.create("slow"); return cb.run(it, throwable -> Mono.just("fallback")); }); } } |
配置斷路器
在大多數情況下,您將需要配置斷路器的行為。為此,您可以建立型別的bean Customizer。Spring Cloud斷路器允許您為所有斷路器提供預設配置以及特定斷路器的配置。例如,要在使用Resilience4J時為所有斷路器提供預設配置,您可以將以下bean新增到配置類:
@Bean public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer() { return factory -> factory.configureDefault( id -> new Resilience4JConfigBuilder(id) .timeLimiterConfig(TimeLimiterConfig.custom() .timeoutDuration(Duration.ofSeconds(4)).build()) .circuitBreakerConfig(CircuitBreakerConfig.ofDefaults()) .build()); } |
配置單個斷路器的程式碼和上面看起來非常相似,另外您需要在Customizer其中提供斷路器ID ,如下所示:
@Bean public Customizer<Resilience4JCircuitBreakerFactory> slowCustomizer() { return factory -> factory.configure(builder -> { return builder .timeLimiterConfig(TimeLimiterConfig.custom() .timeoutDuration(Duration.ofSeconds(2)).build()) .circuitBreakerConfig( CircuitBreakerConfig.ofDefaults()); }, "slow"); } |
我們期待聽到您對這個新專案的看法。檢視GitHub專案以及文件以獲取更多資訊。與往常一樣,您可以透過Stack Overflow和Gitter或透過建立GitHub問題與我們聯絡。
相關文章
- spring cloud之斷路器hystrix(五)SpringCloud
- Spring Cloud Gateway的斷路器(CircuitBreaker)功能SpringCloudGatewayUI
- Spring Cloud介紹 Spring Cloud與Dubbo對比SpringCloud
- (2)Spring Cloud版本介紹SpringCloud
- spring cloud 簡單介紹SpringCloud
- Spring Cloud(五)斷路器監控(Hystrix Dashboard)SpringCloud
- Java之Spring Cloud概念介紹JavaSpringCloud
- Spring Cloud 中的元件介紹SpringCloud元件
- 介紹一下Spring Cloud簡介SpringCloud
- Spring Cloud Netflix—斷路器:Hystrix客戶端SpringCloud客戶端
- Spring Cloud構建微服務架構-Hystrix斷路器SpringCloud微服務架構
- Spring Cloud構建微服務架構—Hystrix斷路器SpringCloud微服務架構
- 微服務 Spring cloud 各元件介紹微服務SpringCloud元件
- Spring Cloud認知學習(一):Spring Cloud介紹與Eureka使用SpringCloud
- Spring Cloud:使用Hystrix實現斷路器原理詳解(下)SpringCloud
- Spring Cloud Stream 體系及原理介紹SpringCloud
- spring cloud微服務分散式雲架構(四)-斷路器(Hystrix)SpringCloud微服務分散式架構
- Spring Cloud Bus 訊息匯流排介紹SpringCloud
- 介紹一下Spring Cloud Stream主要概念SpringCloud
- 介紹一下Spring Cloud ConfigSpringCloud
- spring cloud構建網際網路分散式微服務雲平臺-斷路器SpringCloud分散式微服務
- Spring Cloud實戰系列(四) - 熔斷器HystrixSpringCloud
- 介紹一下Spring Cloud微服務架構SpringCloud微服務架構
- Spring Cloud入門教程-Hystrix斷路器實現容錯和降級SpringCloud
- (2)java Spring Cloud+Spring boot企業快速開發架構之Spring Cloud版本介紹JavaCloudSpring Boot架構
- Spring Cloud Gateway自定義過濾器實戰(觀測斷路器狀態變化)SpringCloudGateway過濾器
- 乾貨|Spring Cloud Bus 訊息匯流排介紹SpringCloud
- Spring Cloud Alibaba Sentinel 主要原理和核心類介紹SpringCloud
- Spring cloud(4)-熔斷(Hystrix)SpringCloud
- Node.js 斷路器簡介Node.js
- 介紹一下Spring Cloud分散式微服務雲架構簡介SpringCloud分散式微服務架構
- 跟大家介紹一下關於Spring Cloud ConsulSpringCloud
- Spring介紹Spring
- Spring Cloud Gateway使用簡介SpringCloudGateway
- 簡單介紹網路(伺服器)線路伺服器
- Spring Cloud的無伺服器函式Bean簡介SpringCloud伺服器函式Bean
- Spring AOT介紹Spring
- Spring AOP介紹Spring