天天看點

JAVA ssm b2b2c多使用者商城系統源碼-hystrix工作原理

Hystrix是Netflix開源的一個限流熔斷的項目、主要有以下功能:

隔離(線程池隔離和信号量隔離):限制調用分布式服務的資源使用,某一個調用的服務出現問題不會影響其他服務調用。

優雅的降級機制:逾時降級、資源不足時(線程或信号量)降級,降級後可以配合降級接口傳回托底資料。

融斷:當失敗率達到閥值自動觸發降級(如因網絡故障/逾時造成的失敗率高),熔斷器觸發的快速失敗會進行快速恢複。

緩存:提供了請求緩存、請求合并實作。支援實時監控、報警、控制(修改配置)

下面是他的工作流程:

JAVA ssm b2b2c多使用者商城系統源碼-hystrix工作原理

Hystrix主要有4種調用方式:

toObservable() 方法 :未做訂閱,隻是傳回一個Observable 。

observe() 方法 :調用 #toObservable() 方法,并向 Observable 注冊 rx.subjects.ReplaySubject 發起訂閱。

queue() 方法 :調用 #toObservable() 方法的基礎上,調用:Observable#toBlocking() 和 BlockingObservable#toFuture() 傳回 Future 對象

execute() 方法 :調用 #queue() 方法的基礎上,調用 Future#get() 方法,同步傳回 #run() 的執行結果。

主要的執行邏輯:

1.每次調用建立一個新的HystrixCommand,把依賴調用封裝在run()方法中.

2.執行execute()/queue做同步或異步調用.

3.判斷熔斷器(circuit-breaker)是否打開,如果打開跳到步驟8,進行降級政策,如果關閉進入步驟.

4.判斷線程池/隊列/信号量是否跑滿,如果跑滿進入降級步驟8,否則繼續後續步驟.

5.調用HystrixCommand的run方法.運作依賴邏輯

依賴邏輯調用逾時,進入步驟8.

6.判斷邏輯是否調用成功。傳回成功調用結果;調用出錯,進入步驟8.

7.計算熔斷器狀态,所有的運作狀态(成功, 失敗, 拒絕,逾時)上報給熔斷器,用于統計進而判斷熔斷器狀态.

8.getFallback()降級邏輯。以下四種情況将觸發getFallback調用:

run()方法抛出非HystrixBadRequestException異常。

run()方法調用逾時

熔斷器開啟攔截調用

線程池/隊列/信号量是否跑滿

沒有實作getFallback的Command将直接抛出異常,fallback降級邏輯調用成功直接傳回,降級邏輯調用失敗抛出異常.

9.傳回執行成功結果