Hystrix超時邏輯源碼分析

問題:Hystrix的超時時間,是否包含任務在隊列裏的等待時間

回答:包含

解析如下:

在把任務加入線程池中,先開啓計時器,延遲超時時間檢查任務狀態。

屏幕快照 2019-04-18 下午4.57.44

在哪開啓的,截圖中的HystrixObservableTimeoutOperator的

屏幕快照 2019-04-18 下午4.58.00

添加timer

屏幕快照 2019-04-18 下午8.56.30

開啓定時器,到達超時時間執行listener.tick() , 也就是上層中的tick()實現中。最後通過fallback()將超時異常返回到業務代碼。

屏幕快照 2019-04-18 下午8.55.01

Hystrix線程技術使用的是Java提供的:ThreadPoolExecutor

把任務加入線程池

屏幕快照 2019-04-18 下午7.49.23

Hystrix使用的隊列:

屏幕快照 2019-04-18 下午7.56.13

添加任務時,判斷任務隊列的長度是否多餘設置的rejectQueueSize

屏幕快照 2019-04-18 下午8.49.16

任務執行之前(從隊列中取出之後),會先判斷狀態,如果超時了,則不處理業務,所以如果任務在隊列中還麼有執行,此時超時了,即使分配到了線程,也不會執行。
但是如果任務已經分配到了線程開始執行,此時Timer定時器判斷已經超時,但已經執行的任務不會受影響,直到執行結束

屏幕快照 2019-04-18 下午8.50.22

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章