背景
- 在需要完成重試機制或者心跳機制一類的業務,除了使用excutors做定時任務,還可以使用時間輪完成這類需求
分析
- 使用dubbo中的心跳重試作為案例分析時間輪的使用
原始碼分析

在HeaderExchangeClient啟動的時候呼叫startHeartBeatTask()開啟心跳任務,創建了一個HeartbeatTimerTask任務然后扔到了HashedWheelTimer時間輪類里面去,我們看見是先構造了一個時間輪物件,我們進去看看是啥


上面兩個圖主要是創建時間輪需要的引數,normalizeTicksPerWheel主要是進行位移或找到最近的2的冪次值,怎么使用的呢?呼叫newTimeout就可以進去看看做了啥


經過上面兩個方法,我們就可以把任務扔到待分配佇列中去,那么任務是如何執行的呢?看下面



經過上面的work的run就是時間輪核心邏輯后,任務就會倍執行,具體的執行邏輯是什么呢?看expireTimeouts
經過一系列的判斷是否真的要執行任務,具體操作是什么呢,繼續看

在執行完任務后,又呼叫了reput將任務扔回了時間輪,等待下次執行,具體怎么做的呢?

這樣就可以周而復始的執行了,
如果想完成5s/5s/10s/15s/1min/1h這樣的可以使用圈數實作
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/421422.html
標籤:其他
上一篇:資料預處理之資料清理,資料集成,資料規約,資料變化和離散化
下一篇:數分-理論-大資料6-Hive
