由於整個專案是由多個微服務組成的,並且呼叫關係非常複雜,乙個大的專案可能由幾十個幾百個甚至幾千個微服務組成,某個微服務如果在某個節點執行緩慢,或者出現其他問題,由於呼叫關係複雜,有可能造成大面積癱瘓,也就是說會產生雪崩效應
hystrix主要是為了在某個微服務出現故障的時候,不至於影響其他服務,產生大面積癱瘓,防止雪崩
簡單來說,主要功能是增加系統容錯率的
直接右鍵專案新增spring起步依賴即可:hystrix[maintenance]
啟動類上加入乙個註解:
@enablecircuitbreaker
當在主啟動類上有以下註解時候,可以合併
@enablecircuitbreaker
@enablediscoveryclient
可以合併為:
後台伺服器出錯或者超時,可以執行另一段**,向客戶端返回響應
降級響應,可以是錯誤提示,也可以返回快取資料
實現降級**只需要在controller中,某個方法上,再加入乙個註解:
@hystrixcommand
(fallbackmethod=
"降級方法的方法名"
)
注意:降級方法的返回值,接受的引數,需要和原方法一致,如果引數中有註解,可以把註解刪掉,方法名稱可以隨意指定,一般在原方法名後面加乙個fb
在預設條件下(引數可以配置),滿足2個請求
1.10秒內產生20次請求(必須首先滿足)
2.50%失敗,並執行降級**
達成這兩個條件後會直接觸發熔斷,所有請求在前乙個provider中不會向壞的provider傳送請求,而是會直接執行降級**向前返回結果
半開狀態:(一般是5秒進入半開狀態)
在半開狀態下,會嘗試傳送依次請求,如果連線成功,則會關閉斷路器,恢復正常狀態
hystrix有預設超時時間,預設為1000ms
hystrix
:command
:default
:execution
:isolation
:thread
:timeoutinmilliseconds
:500
當配置了ribbon的超時時間大於1秒,hystrix的超時時間是1秒,當超過hystrix的超時時間後,立刻會執行降級方法,然而這個時候,ribbon還在重複連線,即使得到了響應結果,瀏覽器也只會接收到降級方法,無法返回正確響應結果
所以,我們需要把這兩項的超時時間配置
所以我們需要把hystrix的超時時間大於等於ribbon的總超時時長
總超時時長設定為1-2秒比較合適
有另一種方法就是觸發降級後不再進行重試,但是無法實現
需要新起乙個springboot starter專案,加入乙個hystrix dashboard的依賴即可
主啟動類加入註解
@enablehystrixdashboard
完成配置,訪問
即可檢視儀錶盤初始頁面
頁面中輸入:(埠號根據專案配置)
注意:在hystrix專案中,需要事先新增actuator依賴,配置監控端點,否則無法訪問actuator
必須在有請求訪問hystrix專案後,才有監控資料
Feign微服務負載均衡和容錯率
整合了hystrix和ribbon,並提供了宣告式消費者客戶端 功能 為微服務架構提供了provider之間的負載均衡和系統容錯率 建立乙個單獨的feign專案,加入依賴 openfeign,eureka discovery client,hystrix yml配置 spring name feig...
服務容錯保護Hystrix
服務容錯保護hystrix hystrix服務降級 前言在微服務架構中,我們將系統拆分成了乙個個的服務單元,各單元應用間通過服務註冊與訂閱的方式互相依賴。由於每個單元都在不同的程序中執行,依賴通過遠端呼叫的方式執行,這樣就有可能因為網路原因或是依賴服務自身問題出現呼叫故障或延遲,而這些問題會直接導致...
服務容錯保護(Hystrix服務降級)
在微服務架構中,我們將系統拆分成了乙個個的服務單元,各單元應用間通過服務註冊與訂閱的方式互相依賴。由於每個單元都在不同的程序中執行,依賴通過遠端呼叫的方式執行,這樣就有可能因為網路原因或是依賴服務自身問題出現呼叫故障或延遲,而這些問題會直接導致呼叫方的對外服務也出現延遲,若此時呼叫方的請求不斷增加,...