SpringCloud構建微服務架構-Hystrix服務降級
在微服務架構中,我們將系統拆分成了一個個的服務單元,各單元應用間透過服務註冊與訂閱的方式互相依賴。由於每個單元都在不同的程式中執行,依賴透過遠端呼叫的方式執行,這樣就有可能因為網路原因或是依賴服務自身問題出現呼叫故障或延遲,而這些問題會直接導致呼叫方的對外服務也出現延遲,若此時呼叫方的請求不斷增加,最後就會出現因等待出現故障的依賴方響應而形成任務積壓,執行緒資源無法釋放,最終導致自身服務的癱瘓,進一步甚至出現故障的蔓延最終導致整個系統的癱瘓。如果這樣的架構存在如此嚴重的隱患,那麼相較傳統架構就更加的不穩定。為了解決這樣的問題,因此產生了斷路器等一系列的服務保護機制。
針對上述問題,在Spring Cloud Hystrix中實現了執行緒隔離、斷路器等一系列的服務保護功能。它也是基於Netflix的開源框架 Hystrix實現的,該框架目標在於透過控制那些訪問遠端系統、服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。Hystrix具備了服務降級、服務熔斷、執行緒隔離、請求快取、請求合併以及服務監控等強大功能。
接下來,我們就從一個簡單示例開始對Spring Cloud Hystrix的學習與使用。
在開始使用Spring Cloud Hystrix實現斷路器之前,我們先拿之前實現的一些內容作為基礎,其中包括:
eureka-server工程:服務註冊中心,埠:1001
eureka-client工程:服務提供者,兩個例項啟動埠分別為2001
下面我們可以複製一下之前實現的一個服務消費者:eureka-consumer-ribbon,命名為eureka-consumer-ribbon-hystrix。下面我們開始對其進行改在:
第一步:pom.xml的dependencies節點中引入spring-cloud-starter-hystrix依賴:
org.springframework.cloud spring-cloud-starter-hystrix
第二步:在應用主類中使用@EnableCircuitBreaker或@EnableHystrix註解開啟Hystrix的使用:
@EnableCircuitBreaker @EnableDiscoveryClient @SpringBootApplication public class Application { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); } }
注意:這裡我們還可以使用Spring Cloud應用中的@SpringCloudApplication註解來修飾應用主類,該註解的具體定義如下所示。我們可以看到該註解中包含了上我們所引用的三個註解,這也意味著一個Spring Cloud標準應用應包含服務發現以及斷路器。
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootApplication @EnableDiscoveryClient @EnableCircuitBreaker public @interface SpringCloudApplication { }
第三步:改造服務消費方式,新增ConsumerService類,然後將在Controller中的邏輯遷移過去。最後,在為具體執行邏輯的函式上增加@HystrixCommand註解來指定服務降級方法,比如:
@RestController public class DcController { @Autowired ConsumerService consumerService; @GetMapping("/consumer") public String dc() { return consumerService.consumer(); } class ConsumerService { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "fallback") public String consumer() { return restTemplate.getForObject("", String.class); } public String fallback() { return "fallback"; } } }
下面我們來驗證一下上面Hystrix帶來的一些基礎功能。我們先把涉及的服務都啟動起來,然後訪問localhost:2101/consumer,此時可以獲取正常的返回,比如:Services: [eureka-consumer-ribbon-hystrix, eureka-client]。
為了觸發服務降級邏輯,我們可以將服務提供者eureka-client的邏輯加一些延遲,比如:
@GetMapping("/dc") public String dc() throws InterruptedException { Thread.sleep(5000L); String services = "Services: " + discoveryClient.getServices(); System.out.println(services); return services; }
重啟eureka-client之後,再嘗試訪問localhost:2101/consumer,此時我們將獲得的返回結果為:fallback。我們從eureka-client的控制檯中,可以看到服務提供方輸出了原本要返回的結果,但是由於返回前延遲了5秒,而服務消費方觸發了服務請求超時異常,服務消費者就透過HystrixCommand註解中指定的降級邏輯進行執行,因此該請求的結果返回了fallback。這樣的機制,對自身服務起到了基礎的保護,同時還為異常情況提供了自動的服務降級切換機制。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2508/viewspace-2803193/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring Cloud構建微服務架構-Hystrix服務降級SpringCloud微服務架構
- Spring Cloud構建微服務架構—服務容錯保護(Hystrix服務降級)SpringCloud微服務架構
- 微服務架構—服務降級微服務架構
- 用 Hystrix 構建高可用服務架構架構
- SpringCloud-Hystrix 服務降級、熔斷SpringGCCloud
- Spring Cloud構建微服務架構-Hystrix斷路器SpringCloud微服務架構
- Spring Cloud構建微服務架構—Hystrix斷路器SpringCloud微服務架構
- Spring Cloud構建微服務架構-Hystrix依賴隔離SpringCloud微服務架構
- Spring Cloud構建微服務架構Hystrix監控皮膚SpringCloud微服務架構
- SpringCloud Netflix (五) : Hystrix 服務熔斷和服務降級SpringGCCloud
- 微服務架構:構建PHP微服務生態微服務架構PHP
- springcloud微服務實戰 學習筆記五 Hystrix服務降級 Hystrix依賴隔離 斷路器SpringGCCloud微服務筆記
- 如何構建微服務架構微服務架構
- Spring Cloud構建微服務架構-服務閘道器SpringCloud微服務架構
- 單體架構&微服務架構&中臺服務架構架構微服務
- SpringCloud(1) ——回顧微服務和微服務架構SpringGCCloud微服務架構
- Spring Cloud構建微服務架構服務消費RibbonSpringCloud微服務架構
- Spring Cloud構建微服務架構—服務消費(Feign)SpringCloud微服務架構
- Spring Cloud構建微服務架構服務消費-RibbonSpringCloud微服務架構
- Spring Cloud構建微服務架構—服務消費FeignSpringCloud微服務架構
- Spring Cloud構建微服務架構—服務消費RibbonSpringCloud微服務架構
- Spring Cloud構建微服務架構—服務消費基礎SpringCloud微服務架構
- Spring Cloud構建微服務架構服務容錯保護SpringCloud微服務架構
- Spring Cloud雲服務架構 - 企業分散式微服務雲架構構建SpringCloud架構分散式微服務
- 億級流量架構之服務降級思路與方法架構
- 整合spring cloud雲服務架構 - 企業分散式微服務雲架構構建SpringCloud架構分散式微服務
- 微服務架構之「 服務註冊 」微服務架構
- (四)整合spring cloud雲服務架構 - 企業分散式微服務雲架構構建SpringCloud架構分散式微服務
- Spring Cloud構建微服務架構-spring cloud服務監控中心SpringCloud微服務架構
- Spring Cloud構建微服務架構—服務閘道器過濾器SpringCloud微服務架構過濾器
- Spring Cloud構建微服務架構:服務消費(Ribbon)【Dalston版】SpringCloud微服務架構
- 服務端指南 服務端概述 | 微服務架構概述服務端微服務架構
- 微服務架構 | 5. 服務容災微服務架構
- SpringCloud微服務架構開發實戰SpringGCCloud微服務架構
- 一. SpringCloud簡介與微服務架構SpringGCCloud微服務架構
- 微服務、雲架構構建電子商務平臺微服務架構
- 分散式微服務雲架構構建電子商務分散式微服務架構
- 微服務架構微服務架構