1. 程式人生 > >Spring Cloud入門與實踐(三)-Hystrix

Spring Cloud入門與實踐(三)-Hystrix

接著跟著前一篇,通過負載均衡來減輕服務端壓力,客戶端利用RestTemplate來獲取服務。
那麼這裡有個問題,如果所有伺服器極限壓力了,那麼就算負載都沒有用了,等了好久沒返回怎麼辦?
此時就需要伺服器的容錯機制了。

容錯性

服務的容錯性,簡單講就是為失敗而設計。比如以下情況:
由於網路原因或是依賴服務自身問題出現呼叫故障或延遲,而這些問題直接導致呼叫方的對外服務也延遲,若此時呼叫方請求不斷增加,最後就會
因等待出現故障的依賴方響應形成任務積壓,最終導致自身服務的癱瘓。

What is Hystrix

Spring Cloud Hystrix 實現了斷路器,執行緒隔離等一系列服務保護功能,它也是基於Netflix的開源框架Hystrix實現的。
Hystrix具有服務降級、服務熔斷、執行緒和訊號隔離、請求快取、請求合併以及服務監控等強大功能。

例子

  1. pom檔案
    在原有pom檔案的基礎上,加入Hystrix支援:
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>
  1. 在啟動類上,加入@EnableCircuitBreaker ,從而開啟斷路器功能。

  2. 對可能需要容錯的方法,加入額外容錯引數:
    例如在本例中,編寫了一個HystrixService

    類,對它的hystrixService方法進行容錯操作:

@Service
public class HystrixService {
    @Autowired
    private RestTemplate restTemplate;
    @HystrixCommand(fallbackMethod = "hystrixFallback")
    public String hystrixService(String name){
        ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://hello-service/hystrix?name={1}"
,String.class,name+":test anla"); String body = responseEntity.getBody(); return body; } public String hystrixFallback(String name){ return "arg is "+name+",sorry,service is busy, please wait a moment and try again."; } }

這樣依賴,當呼叫hystrixService失敗時候(超時或者報錯),例如在controller等裡面呼叫,就會呼叫hystrixFallback返回結果。
從而使得無論成功或者失敗,結果都是可控的。

Hystrix Dashboard

Hystrix還給我們提供了一個監控功能,從裡面可以看到Hystrix的各項指標資訊。以下幾步即可輕鬆應用
1. pom檔案:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
  1. 在application.yaml上面配置埠以及例項名稱:
spring:
  application:
    name: hystrix-dashboard
server:
  port: 2001
  1. 開啟@EnableHystrixDashboard 在啟動類上加上如上註解即可。
    這裡寫圖片描述

  2. 如果需要監控某個包含熔斷器的應用熔斷情況,在上圖輸入該專案地址例如:http://127.0.0.1:8086/hystrix.stream 再點選Monitor Stream 即可。 另外,需要在pom中加入hystrix和actuator兩個依賴包。此時就能看到如下dashboard:
    這裡寫圖片描述

實心圓:顏色代表健康度,(綠-黃-紅-橙遞減);大小代表併發量。
曲線:請求量的變化,可以通過他來觀察流量上升下降趨勢