Spring Cloud入門與實踐(三)-Hystrix
接著跟著前一篇,通過負載均衡來減輕服務端壓力,客戶端利用RestTemplate來獲取服務。
那麼這裡有個問題,如果所有伺服器極限壓力了,那麼就算負載都沒有用了,等了好久沒返回怎麼辦?
此時就需要伺服器的容錯機制了。
容錯性
服務的容錯性,簡單講就是為失敗而設計。比如以下情況:
由於網路原因或是依賴服務自身問題出現呼叫故障或延遲,而這些問題直接導致呼叫方的對外服務也延遲,若此時呼叫方請求不斷增加,最後就會
因等待出現故障的依賴方響應形成任務積壓,最終導致自身服務的癱瘓。
What is Hystrix
Spring Cloud Hystrix 實現了斷路器,執行緒隔離等一系列服務保護功能,它也是基於Netflix的開源框架Hystrix實現的。
Hystrix具有服務降級、服務熔斷、執行緒和訊號隔離、請求快取、請求合併以及服務監控等強大功能。
例子
- pom檔案
在原有pom檔案的基礎上,加入Hystrix支援:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
在啟動類上,加入
@EnableCircuitBreaker
,從而開啟斷路器功能。對可能需要容錯的方法,加入額外容錯引數:
例如在本例中,編寫了一個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>
- 在application.yaml上面配置埠以及例項名稱:
spring:
application:
name: hystrix-dashboard
server:
port: 2001
開啟
@EnableHystrixDashboard
在啟動類上加上如上註解即可。
如果需要監控某個包含熔斷器的應用熔斷情況,在上圖輸入該專案地址例如:
http://127.0.0.1:8086/hystrix.stream
再點選Monitor Stream 即可。 另外,需要在pom中加入hystrix和actuator兩個依賴包。此時就能看到如下dashboard:
實心圓:顏色代表健康度,(綠-黃-紅-橙遞減);大小代表併發量。
曲線:請求量的變化,可以通過他來觀察流量上升下降趨勢