成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Cloud構建微服務架構:服務容錯保護(Hystrix服務降級)

企業動態
在Spring Cloud Hystrix中實現了線程隔離、斷路器等一系列的服務保護功能。它也是基于Netflix的開源框架 Hystrix實現的,該框架目標在于通過控制那些訪問遠程系統、服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。Hystrix具備了服務降級、服務熔斷、線程隔離、請求緩存、請求合并以及服務監控等強大功能。

[[195587]]

前言

在微服務架構中,我們將系統拆分成了一個個的服務單元,各單元應用間通過服務注冊與訂閱的方式互相依賴。由于每個單元都在不同的進程中運行,依賴通過遠程調用的方式執行,這樣就有可能因為網絡原因或是依賴服務自身問題出現調用故障或延遲,而這些問題會直接導致調用方的對外服務也出現延遲,若此時調用方的請求不斷增加,***就會出現因等待出現故障的依賴方響應而形成任務積壓,線程資源無法釋放,最終導致自身服務的癱瘓,進一步甚至出現故障的蔓延最終導致整個系統的癱瘓。如果這樣的架構存在如此嚴重的隱患,那么相較傳統架構就更加的不穩定。為了解決這樣的問題,因此產生了斷路器等一系列的服務保護機制。

針對上述問題,在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依賴:

  1. <dependency> 
  2.     <groupId>org.springframework.cloud</groupId> 
  3.     <artifactId>spring-cloud-starter-hystrix</artifactId> 
  4. </dependency> 

第二步:在應用主類中使用@EnableCircuitBreaker或@EnableHystrix注解開啟Hystrix的使用:

  1. @EnableCircuitBreaker 
  2. @EnableDiscoveryClient 
  3. @SpringBootApplication 
  4. public class Application { 
  5.     @Bean 
  6.     @LoadBalanced 
  7.     public RestTemplate restTemplate() { 
  8.         return new RestTemplate(); 
  9.     } 
  10.     public static void main(String[] args) { 
  11.         new SpringApplicationBuilder(Application.class).web(true).run(args); 
  12.     } 

注意:這里我們還可以使用Spring Cloud應用中的@SpringCloudApplication注解來修飾應用主類,該注解的具體定義如下所示。我們可以看到該注解中包含了上我們所引用的三個注解,這也意味著一個Spring Cloud標準應用應包含服務發現以及斷路器。

  1. @Target({ElementType.TYPE}) 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. @Documented 
  4. @Inherited 
  5. @SpringBootApplication 
  6. @EnableDiscoveryClient 
  7. @EnableCircuitBreaker 
  8. public @interface SpringCloudApplication { 

第三步:改造服務消費方式,新增ConsumerService類,然后將在Controller中的邏輯遷移過去。***,在為具體執行邏輯的函數上增加@HystrixCommand注解來指定服務降級方法,比如:

  1. @RestController 
  2. public class DcController { 
  3.     @Autowired 
  4.     ConsumerService consumerService; 
  5.     @GetMapping("/consumer"
  6.     public String dc() { 
  7.         return consumerService.consumer(); 
  8.     } 
  9.     class ConsumerService { 
  10.         @Autowired 
  11.         RestTemplate restTemplate; 
  12.         @HystrixCommand(fallbackMethod = "fallback"
  13.         public String consumer() { 
  14.             return restTemplate.getForObject("http://eureka-client/dc", String.class); 
  15.         } 
  16.         public String fallback() { 
  17.             return "fallback"
  18.         } 
  19.     } 

下面我們來驗證一下上面Hystrix帶來的一些基礎功能。我們先把涉及的服務都啟動起來,然后訪問localhost:2101/consumer,此時可以獲取正常的返回,比如:Services: [eureka-consumer-ribbon-hystrix, eureka-client]。

為了觸發服務降級邏輯,我們可以將服務提供者eureka-client的邏輯加一些延遲,比如:

  1. @GetMapping("/dc"
  2. public String dc() throws InterruptedException { 
  3.     Thread.sleep(5000L); 
  4.     String services = "Services: " + discoveryClient.getServices(); 
  5.     System.out.println(services); 
  6.     return services; 

重啟eureka-client之后,再嘗試訪問localhost:2101/consumer,此時我們將獲得的返回結果為:fallback。我們從eureka-client的控制臺中,可以看到服務提供方輸出了原本要返回的結果,但是由于返回前延遲了5秒,而服務消費方觸發了服務請求超時異常,服務消費者就通過HystrixCommand注解中指定的降級邏輯進行執行,因此該請求的結果返回了fallback。這樣的機制,對自身服務起到了基礎的保護,同時還為異常情況提供了自動的服務降級切換機制。

更多Spring Cloud內容請持續關注我的博客更新或在《Spring Cloud微服務實戰》中獲取。

代碼示例

樣例工程將沿用之前在碼云和GitHub上創建的SpringCloud-Learning項目,重新做了一下整理。通過不同目錄來區分Brixton和Dalston的示例。

碼云:點擊查看

GitHub:點擊查看

具體工程說明如下:

  • eureka的服務注冊中心:eureka-server
  • eureka的服務提供方:eureka-client
  • eureka的服務消費者:eureka-consumer-ribbon-hystrix

【本文為51CTO專欄作者“翟永超”的原創稿件,轉載請通過51CTO聯系作者獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2017-07-04 17:35:46

微服務架構Spring Clou

2017-06-26 09:06:10

Spring Clou微服務架構

2017-09-04 16:15:44

服務網關架構

2017-08-10 11:15:05

Spring Clou微服務架構

2017-08-09 15:50:47

Spring Clou微服務架構

2021-03-16 08:31:59

微服務Sentinel雪崩效應

2017-12-20 15:37:39

Spring Clou微服務架構

2017-06-25 13:33:25

Spring Clou微服務架構

2018-03-02 16:11:29

Spring Clou分布式服務跟蹤

2018-04-16 14:56:56

微服務架構分布式服務

2018-04-18 16:07:49

Spring Clou微服務分布式

2017-09-09 23:15:20

Spring Clou微服務架構路由

2018-07-09 09:27:10

Spring Clou微服務架構

2018-08-01 14:20:11

微服務架構人工智能

2018-03-13 16:42:26

分布式服務跟蹤

2018-04-09 13:56:13

微服務架構分布式

2018-04-02 15:01:31

微服務架構分布式服務

2021-10-19 14:02:12

服務器SpringSecurity

2017-09-15 23:29:53

Spring Clou微服務架構過濾器

2017-07-28 16:41:53

Spring Clou微服務架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草中文在线观看 | 国产精品麻 | 综合二区 | 久久综合一区 | 成人免费精品视频 | 精品少妇v888av| 亚洲国产精品一区二区三区 | 日韩视频一区在线观看 | 日韩精品久久久久久 | 国产成人av在线 | 欧美精品成人一区二区三区四区 | 日日摸日日添日日躁av | 激情网站在线观看 | 欧美日韩国产不卡 | 欧美日韩国产在线 | 一区二区在线 | 欧美中文一区 | 国产一级网站 | 欧美性jizz18性欧美 | 人人干天天干 | 国产一区二区免费 | 日韩精品久久一区二区三区 | 成人精品一区 | 亚洲国产精品va在线看黑人 | 美女福利网站 | 91精品久久久久久久久中文字幕 | 欧美日韩国产一区二区三区 | 欧美成人一级 | 日日骚视频 | 一区二区三区中文字幕 | 亚洲高清一区二区三区 | 夜夜av| 一区二区免费看 | 九一国产精品 | 日本欧美大片 | 中文二区 | 91动漫在线观看 | 欧美精品乱码99久久影院 | 国产精品美女久久久久久免费 | 亚洲欧美中文日韩在线 | 夜夜操操操 |