SpringCloud中的斷路器(Hystrix)和斷路器監(jiān)控(Dashboard)
前言
本篇主要介紹的是SpringCloud中的斷路器(Hystrix)和斷路器指標(biāo)看板(Dashboard)的相關(guān)使用知識。
SpringCloud Hystrix
Hystrix 介紹
Netflix創(chuàng)建了一個名為Hystrix的庫,它實現(xiàn)了斷路器模式。主要的目的是為了解決服務(wù)雪崩效應(yīng)的一個組件,是保護(hù)服務(wù)高可用的最后一道防線。
開發(fā)準(zhǔn)備
開發(fā)環(huán)境
•JDK:1.8
•SpringBoot:2.1.1.RELEASE
•SpringCloud:Finchley
注:不一定非要用上述的版本,可以根據(jù)情況進(jìn)行相應(yīng)的調(diào)整。需要注意的是SpringBoot2.x以后,jdk的版本必須是1.8以上!
確認(rèn)了開發(fā)環(huán)境之后,我們再來添加相關(guān)的pom依賴。
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
注: 實際上這里是不需要Hystrix依賴的,F(xiàn)egin已經(jīng)添加了Hystrix依賴。
SpringCloud Hystrix 示例
由于Hystrix機(jī)制是在微服務(wù)項目上進(jìn)行的,并且Fegin中包含了該機(jī)制。所以這里我們可以把之前的springcloud-feign的項目進(jìn)行簡單的改造就行了。
服務(wù)端
首先是服務(wù)端這塊,為了進(jìn)行區(qū)分,創(chuàng)建一個springcloud-hystrix-eureka的項目,用于做注冊中心。 代碼和配置和之前的基本一樣。
application.properties配置信息:
配置信息:
spring.application.name=springcloud-hystrix-eureka-server server.port=8002 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.serviceUrl.defaultZone=http://localhost:8002/eureka/
配置說明:
•spring.application.name: 這個是指定服務(wù)名稱。
•server.port:服務(wù)指定的端口。
•eureka.client.register-with-eureka:表示是否將自己注冊到Eureka Server,默認(rèn)是true。
•eureka.client.fetch-registry:表示是否從Eureka Server獲取注冊信息,默認(rèn)為true。
•eureka.client.serviceUrl.defaultZone: 這個是設(shè)置與Eureka Server交互的地址,客戶端的查詢服務(wù)和注冊服務(wù)都需要依賴這個地址。
服務(wù)端這邊只需要在SpringBoot啟動類添加@EnableEurekaServer注解就可以了,該注解表示此服務(wù)是一個服務(wù)注冊中心服務(wù)。
代碼示例:
@EnableEurekaServer
@SpringBootApplication
public class HystrixEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixEurekaApplication.class, args);
System.out.println("hystrix注冊中心服務(wù)啟動...");
}
}
客戶端
這里我們把之前的springcloud-fegin-consumer項目稍微改造下,項目名改為springcloud-hystrix-consumer。然后在application.properties配置文件新增如下配置, feign.hystrix.enabled配置表示是否啟用熔斷機(jī)制。
feign.hystrix.enabled=true
增加了配置之后,我們在來把之前的fegin進(jìn)行定義轉(zhuǎn)發(fā)服務(wù)的@FeignClient注解進(jìn)行添加一個回調(diào)方法fallback。代碼改造后的實現(xiàn)如下:
@FeignClient(name= "springcloud-hystrix-consumer2",fallback = HelloRemoteHystrix.class)
public interface HelloRemote {
@RequestMapping(value = "/hello")
public String hello(@RequestParam(value = "name") String name);
}
最后新增一個回調(diào)類,用于處理斷路的情況。這里我們就簡單的處理下,返回錯誤信息即可!
代碼示例:
@Component
public class HelloRemoteHystrix implements HelloRemote{
@Override
public String hello(@RequestParam(value = "name") String name) {
return name+", 請求另一個服務(wù)失敗!";
}
}
其余的代碼就不展示了,和之前的springcloud-fegin-consumer項目中的一致,然后在把之前的springcloud-feign-consumer2進(jìn)行簡單的改造下,項目名稱改為springcloud-hystrix-consumer2。然后更改下配置的端口。
功能測試
完成如上的工程開發(fā)之后,我們依次啟動服務(wù)端和客戶端的springcloud-hystrix-eureka、springcloud-hystrix-consumer和springcloud-hystrix-consumer2這三個程序,然后在瀏覽器界面輸入:http://localhost:8002/,即可查看注冊中心的信息。
首先在瀏覽器輸入:
http://localhost:9004/hello/pancm
控制臺打印:
接受到請求參數(shù):pancm,進(jìn)行轉(zhuǎn)發(fā)到其他服務(wù)
瀏覽器返回:
pancm,Hello World
然后再輸入:
http://localhost:9005/hello?name=pancm
瀏覽器返回:
pancm,Hello World
說明程序運(yùn)行正常,fegin的調(diào)用也ok。這時我們在進(jìn)行斷路測試。
停止springcloud-hystrix-consumer2這個服務(wù),然后在到瀏覽器輸入:http://localhost:9004/hello/pancm 進(jìn)行查看信息。
控制臺打印:
接受到請求參數(shù):pancm,進(jìn)行轉(zhuǎn)發(fā)到其他服務(wù)
瀏覽器返回:
pancm, 請求另一個服務(wù)失敗!
出現(xiàn)以上結(jié)果說明斷路器的功能已經(jīng)實現(xiàn)了。
示例圖:

SpringCloud Hystrix-Dashboard
Hystrix-Dashboard 介紹
Hystrix-dashboard是一款針對Hystrix進(jìn)行實時監(jiān)控的工具,通過Hystrix Dashboard我們可以在直觀地看到各Hystrix Command的請求響應(yīng)時間, 請求成功率等數(shù)據(jù)。
開發(fā)準(zhǔn)備
開發(fā)環(huán)境
•JDK:1.8
•SpringBoot:2.1.1.RELEASE
•SpringCloud:Finchley
注:不一定非要用上述的版本,可以根據(jù)情況進(jìn)行相應(yīng)的調(diào)整。需要注意的是SpringBoot2.x以后,jdk的版本必須是1.8以上!
確認(rèn)了開發(fā)環(huán)境之后,我們再來添加相關(guān)的pom依賴。
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
注: spring-boot-starter-actuator這個必須需要要,該jar可以得到SpringBoot項目的各種信息,關(guān)于該jar包的使用,可以在springboot-actuator這個項目中進(jìn)行查看。
SpringCloud Hystrix-Dashboard 示例
這里我們把上面的springcloud-hystrix-consumer項目進(jìn)行改造下,項目名稱改為springcloud-hystrix-dashboard-consumer。然后在到啟動類新增如下配置。
•EnableCircuitBreaker:表示啟用hystrix功能。
•EnableHystrixDashboard:啟用 HystrixDashboard 斷路器看板 相關(guān)配置。
完整的啟動類配置如下:
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrixDashboard
@EnableCircuitBreaker
@EnableFeignClients
public class HystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class, args);
System.out.println("hystrix dashboard 服務(wù)啟動...");
}
}
然后在到application.properties配置文件中新增如下配置:
management.endpoints.web.exposure.include=hystrix.stream
management.endpoints.web.base-path=/
該配置的意思是指定hystrixDashboard的訪問路徑,SpringBoot2.x以上必須指定,不然是無法進(jìn)行訪問的,訪問會出現(xiàn) Unable to connect to Command Metric Stream 錯誤。
如果不想使用配置的話,也可以使用代碼進(jìn)行實現(xiàn)。
實現(xiàn)的代碼如下:
@Component
public class HystrixServlet extends Servlet{
@Bean
public ServletRegistrationBean getServlet() {
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}
}
功能測試
完成如上的工程改造之后,我們啟動該程序。
然后在瀏覽器輸入:
會出現(xiàn)以下的界面:

可以通過該界面監(jiān)控使用了hystrix dashboard的項目。這里我們依照提示在中間的輸入框輸入如下的地址:
http://localhost:9010/hystrix.stream
會出現(xiàn)以下的界面:

該界面就是Hystrix Dashboard監(jiān)控的界面了,通過這個界面我們可以很詳細(xì)的看到程序的信息。關(guān)于這些信息中說明可以用網(wǎng)上找到的一張來加以說明。

注: 如果界面一直提示loading,那么是因為沒有進(jìn)行請求訪問,只需在到瀏覽器上輸入:http://localhost:9010/hello/pancm,然后刷新該界面就可以進(jìn)行查看了。
項目地址
基于SpringBoot2.x、SpringCloud的Finchley版本開發(fā)的地址:https://github.com/xuwujing/springcloud-study
基于SpringBoot1.x、SpringCloud 的Dalston版本開發(fā)的地址: https://github.com/xuwujing/springcloud-study-old
總結(jié)
以上所述是小編給大家介紹的SpringCloud中的斷路器(Hystrix)和斷路器監(jiān)控(Dashboard),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
Java程序順序結(jié)構(gòu)中邏輯控制語句詳解流程
在程序開發(fā)的過程之中一共會存在有三種程序邏輯:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),對于之前所編寫的代碼大部分都是順序結(jié)構(gòu)的定義,即:所有的程序?qū)凑斩x的代碼順序依次執(zhí)行2021-10-10
Java編程實現(xiàn)快速排序及優(yōu)化代碼詳解
這篇文章主要介紹了Java編程實現(xiàn)快速排序及優(yōu)化代碼詳解,具有一定借鑒價值,需要的朋友可以了解下。2017-12-12
Java日期時間與正則表達(dá)式超詳細(xì)整理(適合新手入門)
如果使用得當(dāng),正則表達(dá)式是匹配各種模式的強(qiáng)大工具,下面這篇文章主要給大家介紹了關(guān)于Java日期時間與正則表達(dá)式超詳細(xì)整理的相關(guān)資料,本文非常適合新手入門,需要的朋友可以參考下2023-04-04
Java Web開發(fā)中過濾器和監(jiān)聽器使用詳解
這篇文章主要為大家詳細(xì)介紹了Java中的過濾器Filter和監(jiān)聽器Listener的使用以及二者的區(qū)別,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-10-10
SpringBoot集成Druid連接池進(jìn)行SQL監(jiān)控的問題解析
這篇文章主要介紹了SpringBoot集成Druid連接池進(jìn)行SQL監(jiān)控的問題解析,在SpringBoot工程中引入Druid連接池非常簡單,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07
Springboot解決no main manifest attribute錯誤
在開發(fā)Springboot項目時,使用java -jar命令運(yùn)行jar包可能出現(xiàn)no main manifest attribute錯誤,本文就來介紹一下該錯誤的解決方法,感興趣的可以了解一下2024-09-09

