問題:Hystrix的超時時間,是否包含任務在隊列裏的等待時間
回答:包含
解析如下:
在把任務加入線程池中,先開啓計時器,延遲超時時間檢查任務狀態。
在哪開啓的,截圖中的HystrixObservableTimeoutOperator的
添加timer
開啓定時器,到達超時時間執行listener.tick()
, 也就是上層中的tick()實現中。最後通過fallback()
將超時異常返回到業務代碼。
Hystrix線程技術使用的是Java提供的:ThreadPoolExecutor
把任務加入線程池
Hystrix使用的隊列:
添加任務時,判斷任務隊列的長度是否多餘設置的rejectQueueSize
任務執行之前(從隊列中取出之後),會先判斷狀態,如果超時了,則不處理業務,所以如果任務在隊列中還麼有執行,此時超時了,即使分配到了線程,也不會執行。
但是如果任務已經分配到了線程開始執行,此時Timer定時器判斷已經超時,但已經執行的任務不會受影響,直到執行結束