調(diào)度中心自動(dòng)發(fā)現(xiàn)執(zhí)行器服務(wù)
xxl沒有采用zk等協(xié)作服務(wù)器之众,是通過數(shù)據(jù)庫來實(shí)現(xiàn)的服務(wù)自動(dòng)注冊。
執(zhí)行器端
執(zhí)行器端應(yīng)用啟動(dòng)時(shí)依许,首先會執(zhí)行com.xxl.job.core.executor.XxlJobExecutor.start方法棺禾,這是在applicationcontext-xxl-job.xml中配置好的。
start方法中會啟動(dòng)一個(gè)守護(hù)線程峭跳,守護(hù)線程中通過jetty服務(wù)調(diào)用調(diào)度中心固定的controller(/api/registry)膘婶。
調(diào)度中心
調(diào)度中心提供有很多controller,除了提供給前臺界面UI的controller之外蛀醉,還有個(gè)JobApiController,專門接收執(zhí)行器端發(fā)來的請求悬襟,其中:
/api/registry
接收執(zhí)行器端注冊請求,通過執(zhí)行器appName拯刁,和執(zhí)行器地址更新數(shù)據(jù)庫中的時(shí)間脊岳,即數(shù)據(jù)庫中該執(zhí)行器地址的時(shí)間每隔30秒更新一次。
調(diào)度中心啟動(dòng)時(shí)同時(shí)啟動(dòng)兩個(gè)守護(hù)線程:
JobRegistryMonitorHelper
每隔30秒移除數(shù)據(jù)庫中過期的執(zhí)行器垛玻,通過比較更新時(shí)間小于當(dāng)前時(shí)間-90s割捅。
這樣就可以及時(shí)將宕掉的執(zhí)行器端某個(gè)服務(wù)器排除在外了。