天天看點

SpringCloud之Hystrix叢集及叢集監控turbine

1、Hystrix叢集及監控turbine

2、Feign、Hystrix整合之服務熔斷服務降級徹底解耦

3、叢集後逾時設定

前面Dashboard示範的僅僅是單機服務監控,實際項目基本都是叢集,是以這裡叢集監控用的是turbine。

turbine是基于Dashboard的

先建立叢集:

在microservice-student-provider-hystrix-1004項目的基礎上再建立一個microservice-student-provider-hystrix

pom.xml依賴

1、yml配置

2、啟動類配置

SpringCloud之Hystrix叢集及叢集監控turbine

3、建立項目microservice-student-consumer-hystrix-turbine-91

加pom.xml依賴

4、application.ym

5、啟動類配置

為了示範服務監控的效果,一個逾時一個不逾時

修改一下時間

SpringCloud之Hystrix叢集及叢集監控turbine
SpringCloud之Hystrix叢集及叢集監控turbine

啟動注冊中心,生産者,消費者,監控平台

測試<code>http://localhost/student/hystrix</code>調用服務叢集

SpringCloud之Hystrix叢集及叢集監控turbine
SpringCloud之Hystrix叢集及叢集監控turbine

<code>http://localhost:91/turbine.stream</code> 可以監控資料,實時ping 傳回data

SpringCloud之Hystrix叢集及叢集監控turbine

輸入<code>http://localhost:90/hystrix</code>進入儀表監控,輸入位址

點選進入叢集監控儀表

前面的代碼隻是案例,一個方法寫一個服務熔斷的處理,實際項目開發中可能會有好多方法需要服務熔斷的處理。不可能正常處理業務邏輯的代碼和服務熔斷的處理代碼寫一起,會顯得類非常的亂。

用<code>@HystrixCommand fallbackMethod</code>是很不好的,因為和業務代碼耦合度太高,不利于維護,是以需要解耦,這我們講下Feign Hystrix整合。

1、microservice-student-provider-hystrix項目修改

按照正常的邏輯來寫;

StudentService加新的接口方法:

StudentServiceImpl寫具體實作:

StudentProviderController正常調用service方法:

2、microservice-common項目建立FallbackFactory類,解耦服務熔斷服務降級

StudentClientService接口,新增getInfo方法

建立 StudentClientFallbackFactory 類,實作FallbackFactory接口

StudentClientService接口的@FeignClient注解加下 fallbackFactory屬性

這類我們實作了 降級處理方法實作; 好處:将之前的代碼和熔斷代碼進行解耦

3、microservice-student-consumer-feign-80修改 支援Hystrix

StudentConsumerFeignController新增方法調用

4、microservice-student-consumer-feign-80的application.yml加上hystrix支援

5、microservice-student-consumer-feign-80的啟動類上添加公共子產品

注意: 公共子項目與目前子項目的基包都要掃描到; 隻指定公共子子產品為基包會導緻本子項目的springmvc功能失效; 隻指定本子項目為基包會導緻feign與Hystrix內建失敗,進而導緻服務熔斷功能失效

測試開啟三個eureka,以及帶hystrix的provider,和帶feign,hystrix的consummer。

浏覽器輸入<code>http://localhost/student/hystrix</code>

結果傳回:

SpringCloud之Hystrix叢集及叢集監控turbine
SpringCloud之Hystrix叢集及叢集監控turbine
SpringCloud之Hystrix叢集及叢集監控turbine
錯覺整合成功

叢集改成逾時2s

SpringCloud之Hystrix叢集及叢集監控turbine

單機改成不逾時0.2s

再進行測試<code>http://localhost/student/hystrix</code>

SpringCloud之Hystrix叢集及叢集監控turbine
SpringCloud之Hystrix叢集及叢集監控turbine
SpringCloud之Hystrix叢集及叢集監控turbine
如果搭建成功的1005,1006應該是繁忙熔斷的。

上面錯誤是什麼原因呢,咱們明明在Hystrix中的application.yml中設定了

SpringCloud之Hystrix叢集及叢集監控turbine
這裡因為還有一個 feign 也有一個逾時時間的設定,當然feign底層是 ribbon的封裝,是以 直接配置ribbon,ribbon預設逾時也是1秒。 是以這裡都是強制要求,ribbon的逾時時間要大于hystrix的逾時時間,否則 hystrix自定義的逾時時間毫無意義。

是以還得microservice-student-consumer-feign-80上加個 ribbon逾時時間設定

原來的生産者逾時時間要加入到消費者這裡

SpringCloud之Hystrix叢集及叢集監控turbine

再次測試

既把代碼解耦了,也能看到雪崩處理的效果

SpringCloud之Hystrix叢集及叢集監控turbine

其他都是失敗

SpringCloud之Hystrix叢集及叢集監控turbine

繼續閱讀