參考鏈接:SpringCloud的Hystrix(五) Hystrix機制
1、在線測試
根據定義,生成輸入界面,
點擊測試,
驗證參數,發起調用,返回執行結果
2、熔斷保護




兩個實現類:
NoOpCircuitBreakerImpl,什么也不做的斷路器實現
HystrixCircuitBreakerImpl,實現類:
HystrixCircuitBreakerImpl
- HystrixCommandProperties properties
- HystrixCommandMetrics metrics
- AtomicBoolean circuitOpen
- AtomicLong circuitOpenedOrLastTestedTime:斷路器打開或是上一次測試時間戳
HystrixCircuitBreakerImpl的方法
isOpen 判斷斷路器的打開/關閉狀態
如果打開,直接返回true,表示斷路器處於打開狀態。否則,從度量指標metrics中獲取healthcounts統計對象進一步判斷(該對象記錄了一個滾動時間窗內的請求信息快照,默認時間窗為10秒)
如果請求總數qps在預設的閾值范圍內就返回false,表示斷路器處於未打開狀態,默認值20
如果錯誤百分比在閾值范圍內就返回false,表示斷路器處於未打開狀態,默認值50
如果上述兩個條件都不滿足,就將斷路器設置為打開狀態(熔斷/短路)。同時,如果從關閉狀態切換到打開狀態的話,就將時間記錄到circuitOpenedOrLastTestedTime中。
allowRequest 判斷請求是否被允許
判斷是否強行打開,是則 return false
判斷是否強行關閉,是則 isOpen & return true
!isOpen()||allowSingleTest()::斷開時的時間戳+配置中的circuitBreakerSleepWindowInMillseconds 是否 小於當前時間,如果是的話,就將當前時間更新到記錄斷路器打開的時間circuitBreakerOpenedOrLastTestedTime中,並允許該請求。
即設置了斷路器打開后的休眠時間(默認為5秒),休眠時間達到之后,將再次允許請求嘗試訪問,此時斷路器處於“”半開“”,
若此時請求繼續失敗,則斷路器又進入打開狀態,並等待下一個休眠窗口過去之后再嘗試。
若請求成功, 則將斷路器重新置於關閉狀態。
所以,allowSingleTest()和isOpen()配合,實現了斷路器的打開和關閉狀態的切換。
markSuccess 用來關閉斷路器 在“半開”狀態時使用。若調用命令成功,通過調用它將打開的斷路器關閉,並重置度量指標對象。
命令執行的四個結果:成功、失敗、超時、拒絕,用來更新計時器