原創(chuàng)文章,歡迎轉載。轉載請注明:轉載自IT人故事會,謝謝!
原文鏈接地址:『互聯(lián)網(wǎng)架構』軟件架構-Hystrix&Feign監(jiān)控Dashboard與Turbine聚合(97)
上次說了Hystrix,這個Hystrix是springcloud核心內(nèi)容,如果還是比較了解,多看看官方的api,一定要記住要看一手文檔,不要看二手文檔。上次都是用的小demo,但是在互聯(lián)網(wǎng)公司這些小的demo用的是最多的,
源碼:https://github.com/limingios/netFuture/tree/master/源碼/『互聯(lián)網(wǎng)架構』軟件架構-Hystrix&Feign監(jiān)控Dashboard與Turbine聚合(97)/

(一)Feign整合Hystrix
- Feign是以接口形式工作的,要如何整合Hystrix了?又是如何實現(xiàn)降級了?
事實上,SpringCloud默認已為Feign整合了Hystrix,只要Hystrix在項目的classpath中,F(xiàn)eign默認就會用斷路器包裹所有方法。(注意:從Spring Cloud Dalston開始,F(xiàn)eign默認是不開啟Hystrix的。因此,如使用Dalston及以上版本請務必額外設置屬性:feign.hystrix.enabled=true,否則斷路器不會生效)
源碼:07-ms-consumer-order-feign-hystrix-fallback



Feign整合Hystrix的寫法見<UserFeignClient>類,只需使用@FeignClient注解的fallback屬性就可以為指定名稱Feign客戶端添加降級方法。
(二)Feign禁用Hystrix
- 如何Feign禁用Hystrix
SpringCloud為Feign默認整合了Hystrix,也就是說只要Hystrix在項目的classpath中,F(xiàn)eign就會使用斷路器包裹Feign客戶端的所有方法(Dalston及以上版本默認Feign不開啟Hystrix)。這樣雖然方便,但有的場景并不需要該功能,如何為Feign禁用Hystrix呢?
源碼:07-ms-consumer-order-feign-hystrix-fallback
- 全局禁用Hystrix
只需在application.yml中配置feign.hystrix.enabled=false即可

為指定Feign客戶端禁用Hystrix:增加< FeignDisableHystrixConfiguration >類

在FeignClient注解里加上configuration的屬性配置

- 流程啟動項目
源碼:07-ms-consumer-order-feign-hystrix-fallback
源碼:07-ms-provider-user
源碼:07-ms-eureka-server




(三)Hystrix監(jiān)控
Hystrix還提供了近乎實時的監(jiān)控。 HystrixCommand在執(zhí)行時,會生成
執(zhí)行結果和運行指標,比如每秒執(zhí)行的請求數(shù)、成功數(shù)等,這些監(jiān)控數(shù)據(jù)對分析應用系統(tǒng)的狀態(tài)很有用。
使用 Hystrix的模塊 hystrix-metrics-event-stream,就可將這些監(jiān)控的指標信息以text/event-stream的格式暴露給外部系統(tǒng)。 spring-cloud-starter-netflix-hystrix包含該模塊,在此基礎上,只須為項目添加 spring-boot-starter-actuator依賴,就可使用/hystrix.stream端點獲得Hystrix的監(jiān)控信息了。
- 啟動項目
源碼:07-ms-consumer-order-feign-hystrix-fallback-stream
源碼:07-ms-provider-user
源碼:07-ms-eureka-server
為項目增加依賴

在啟動類上增加@EnableCircuitBreaker,這樣就可以使用/hystrix.stream端點監(jiān)控Hystrix了。

請求對應url:http://127.0.0.1:8020/user/1


上邊都是文字,看都看懵逼了。還是找個可視化的吧。
(四)使用Hystrix Dashboard可視化監(jiān)控數(shù)據(jù)
前面討論了Hystrix的監(jiān)控,但訪問/hystrix.stream端點獲得的數(shù)據(jù)是以文字形式展示的。很難通過這些數(shù)據(jù),一眼看出系統(tǒng)當前的運行狀態(tài)。可使用 Hystrix Dashboard,讓監(jiān)控數(shù)據(jù)圖形化、可視化。
源碼:07-ms-hystrix-dashboard

項目添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

并在啟動類上增加注解@EnableHystrixDashboard

運行項目訪問:http://localhost:8030/hystrix,效果如下圖

將上一個項目的查看監(jiān)控數(shù)據(jù)地址輸入,在title里任意輸入一個監(jiān)控名稱test,點擊Monitor Stream按鈕,效果如下圖(須先運行至少一次訂單服務的用戶查詢接口才能顯示數(shù)據(jù),否則無監(jiān)控數(shù)據(jù))。


在監(jiān)控的界面有兩個重要的圖形信息:一個實心圓和一條曲線。
- 實心圓:
1.通過顏色的變化代表了實例的健康程度,健康程度從綠色、黃色、橙色、
紅色遞減。
2.通過大小表示請求流量發(fā)生變化,流量越大該實心圓就越大。所以可以在大
量的實例中快速發(fā)現(xiàn)故障實例和高壓實例。
- 曲線:
用來記錄2分鐘內(nèi)流浪的相對變化,可以通過它來觀察流量的上升和下降趨勢。
(五)使用Turbine聚合監(jiān)控數(shù)據(jù)
Turbine是一個聚合 Hystrix監(jiān)控數(shù)據(jù)的工具,它可將所有關/hystrix.stream端點的數(shù)據(jù)聚合到一個組合的/turbine.stream中,從而讓集群的監(jiān)控更加方便。
源碼:07-ms-hystrix-turbine

添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>

在啟動類上增加注解@EnableTurbine

編寫配置文件application.yml

Turbine會在Eureka Server中找到microservice-consumer-order和
microservice-consumer-order-feign-hystrix-fallback-stream這兩個微服務,并聚合兩個微服務的監(jiān)控數(shù)據(jù)。
源碼運行流程:
1、運行07-ms-eureka-server項目
2、運行07-ms-provider-user項目
3、運行06-ms-consumer-order-ribbon-hystrix-fallback項目
4、運行07-ms-consumer-order-feign-hystrix-fallback-stream項目
5、運行07-ms-hystrix-turbine項目
6、運行07-ms-hystrix-dashboard項目
訪問turbine監(jiān)控地址:http://127.0.0.1:8031/turbine.stream,可以看到turbine的聚合監(jiān)控數(shù)據(jù)。

訪問dashboard地址:http://localhost:8030/hystrix,將該turbine的監(jiān)控地址輸入dashboard。

hystrix這個監(jiān)控是實時的,如果在線上出現(xiàn)問題了,該怎么辦,不可能一天到晚盯著屏幕吧,之前的公司如果出現(xiàn)問題,發(fā)生熔斷了也就是在hystrix查看的時候Circuit opened了,針對hystrix歷史運維監(jiān)控這塊,這次是說不完的,直接對開發(fā)來說用處也不大。在之后的文章說講解吧。
PS:springcloud的監(jiān)控體系缺失很棒,這是dubbo這些無法比擬的。大家springcloud還有很多不健全的地方,我相信后期springcloud絕對會成為主流。