您好,登錄后才能下訂單哦!
hystrix通過服務(wù)隔離、熔斷(也可以稱為斷路)、降級等手段控制依賴服務(wù)的延遲與失敗。
本篇中主要講解對spring cloud 對hystrix的集成,至于如何單獨(dú)使用hystrix可以參考我分享的pdf.
spring cloud hystrix
引入依賴
-----------------------------------------------------------------
<!--hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<!--hystrix-dashboard 監(jiān)控-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
---------------------------------------------
spring-cloud-starter-hystrix
核心jar
spring-cloud-starter-hystrix-dashboard
監(jiān)控jar
使用EnableCircuitBreaker
或者 EnableHystrix
表明Spring boot
工程啟用hystrix,兩個注解是等價的.
Application.Java
--------------------------------------------------------------------
package com.lkl.springcloud.hystrix;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
@SpringBootApplication
@EnableCircuitBreaker
@EnableHystrixDashboard
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
----------------------------------------------------------------------
其中EnableHystrixDashboard
注解表示啟動對hystrix的監(jiān)控,后面會用到
隨后模擬一個調(diào)用三方依賴服務(wù)
controller
-> service
-> dependency service
---------------------------------------------------------------------
package com.lkl.springcloud.hystrix.controller;
import com.lkl.springcloud.hystrix.service.HystrixService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 模擬一個對外的接口
*/
@RestController
public class HystrixController {
@Autowired
private HystrixService service;
/**
* 調(diào)用依賴的服務(wù)
*/
@RequestMapping("/call")
public String callDependencyService(){
return service.callDependencyService();
}
}
-------------------------------------------------------------------
package com.lkl.springcloud.hystrix.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 依賴服務(wù)
*/
@Service
public class HystrixService {
@Autowired
private CallDependencyService dependencyService;
public String callDependencyService() {
return dependencyService.mockGetUserInfo();
}
}
-----------------------------------------------------------------------
package com.lkl.springcloud.hystrix.service;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.stereotype.Component;
import java.util.Random;
/**
* 調(diào)用依賴服務(wù),通過hystrix包裝調(diào)用服務(wù)
*/
@Component
public class CallDependencyService {
private Random random = new Random();
/**
* 模擬獲取用戶信息(通過網(wǎng)絡(luò)調(diào)用)
* @return
*/
@HystrixCommand(fallbackMethod = "fallback")
public String mockGetUserInfo(){
int randomInt= random.nextInt(10) ;
if(randomInt<8){ //模擬調(diào)用失敗情況
throw new RuntimeException("call dependency service fail.");
}else{
return "UserName:liaokailin;number:"+randomInt;
}
}
public String fallback(){
return "some exception occur call fallback method.";
}
}
------------------------------------------------------------------------------
HystrixCommand
表明該方法為hystrix包裹,可以對依賴服務(wù)進(jìn)行隔離、降級、快速失敗、快速重試等等hystrix相關(guān)功能
該注解屬性較多,下面講解其中幾個
fallbackMethod 降級方法
commandProperties 普通配置屬性,可以配置HystrixCommand對應(yīng)屬性,例如采用線程池還是信號量隔離、熔斷器熔斷規(guī)則等等
ignoreExceptions 忽略的異常,默認(rèn)HystrixBadRequestException
不計入失敗
groupKey() 組名稱,默認(rèn)使用類名稱
commandKey 命令名稱,默認(rèn)使用方法名
運(yùn)行工程,可以訪問 http://localhost:9090/hystrix.stream 獲取dashboard信息,默認(rèn)最大打開5
個終端獲取監(jiān)控信息,可以增加delay
參數(shù)指定獲取監(jiān)控數(shù)據(jù)間隔時間
直接訪問hystrix.stream肯定是不明智的,官方提供監(jiān)控hystrix-dashboard-#.#.#.war包,下載后放入tomcat中,得到如下界面
輸入http://localhost:9090/hystrix.stream 點(diǎn)擊 Monitor stream
進(jìn)入Dashboard界面
訪問 http://localhost:/9090/call 觀察進(jìn)入Dashboard變化
ok ~ it’s work ! more about is here
1:Hystrix使用命令模式HystrixCommand(Command)包裝依賴調(diào)用邏輯,每個命令在單獨(dú)線程中/信號授權(quán)下執(zhí)行。
2:可配置依賴調(diào)用超時時間,超時時間一般設(shè)為比99.5%平均時間略高即可.當(dāng)調(diào)用超時時,直接返回或執(zhí)行fallback邏輯。
3:為每個依賴提供一個小的線程池(或信號),如果線程池已滿調(diào)用將被立即拒絕,默認(rèn)不采用排隊(duì).加速失敗判定時間。
4:依賴調(diào)用結(jié)果分:成功,失敗(拋出異常),超時,線程拒絕,短路。 請求失敗(異常,拒絕,超時,短路)時執(zhí)行fallback(降級)邏輯。
5:提供熔斷器組件,可以自動運(yùn)行或手動調(diào)用,停止當(dāng)前依賴一段時間(10秒),熔斷器默認(rèn)錯誤率閾值為50%,超過將自動運(yùn)行。
6:提供近實(shí)時依賴的統(tǒng)計和監(jiān)控
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。