供貨周期 | 現(xiàn)貨 |
---|
產(chǎn)品簡介
詳細(xì)介紹
1、創(chuàng)建一個HystrixCommand或HystrixObservableCommand對象;
2、通過以下四種方法執(zhí)行命令(前兩種方法僅適用于簡單HystrixCommand對象且不可用HystrixObservableCommand):
- execute():阻塞的,返回從依賴項(xiàng)收到的單個響應(yīng)(或在出現(xiàn)錯誤時拋出異常)
- queue(): 非阻塞的,返回一個可以從依賴項(xiàng)中獲取單個響應(yīng)的方法的Future對象。
- observe(): 訂閱Observable表示來自依賴項(xiàng)的響應(yīng),并返回Observable復(fù)制該源的響應(yīng)Observable
- toObservable(): 返回一個Observable,如果訂閱了,會執(zhí)行Hystrix命令并發(fā)出其響應(yīng)
3、如果為此請求設(shè)置了緩存,首先判斷緩存是否是可用的(即是否可以從緩存得到本次請求的響應(yīng)),如果可以得到則直接返回,得不到再走下一步。
4、判斷斷路器是否打開,如果打開了說明之前的請求失敗了(或者說之前滿足了斷路器的打開條件,具體滿足的開閉條件下一模塊再說),則直接調(diào)用重寫的fallback()函數(shù);如果斷路器未打開再到下一步。
5、判斷與該command關(guān)聯(lián)的線程池和隊(duì)列(或信號量)是否已滿,如果已經(jīng)滿了,則Hystrix不會執(zhí)行該Command,直接調(diào)用fallback()返回;否則到下一步。
6、此時通過HystrixObservableCommand.construct()或HystrixCommand.run()執(zhí)行目的方法調(diào)用對依賴項(xiàng)的請求,如果執(zhí)行失敗或超時則直接執(zhí)行fallback()。
7、健康狀況統(tǒng)計(jì)
Hystrix在執(zhí)行過程中會記錄斷路器的成功,失敗,拒絕和超時狀態(tài),Hystrix維護(hù)一個記錄這些數(shù)據(jù)的計(jì)數(shù)器,計(jì)數(shù)器的數(shù)據(jù)決定斷路器的開閉狀態(tài)。
8、當(dāng)命令失敗時Hystrix都會嘗試回退,一般情況下,如果實(shí)現(xiàn)了HystrixCommand.getFallback()會返回單個回退值,或者實(shí)現(xiàn)HystrixObservableCommand.resumeWithFallback()會發(fā)出一個或多個回退值的Observable。如果沒有實(shí)現(xiàn)fallback方法或在執(zhí)行fallback方法時拋出了異常,Hystrix仍然會返回一個Observable,但不會返回任何內(nèi)容,并立即終止并發(fā)出onError通知。通過此onError通知,導(dǎo)致命令失敗的異常被傳回給調(diào)用者。
9、成功返回