流程圖:
以******job為例說明 :
1、通過litejob實現quartz的job介面,elastic job與quartz聯絡在一起,最終作業按cron配置的時間來觸發。作業啟動時,會依據job的型別,由作業執行工廠jobexecuto***ctory建立相應的作業執行器,並執行execute()方法。
public static abstractelasticjobexecutor getjobexecutor(final elasticjob elasticjob, final jobfacade jobfacade)
if (elasticjob instanceof ******job)
if (elasticjob instanceof dataflowjob)
throw new jobconfigurationexception("cannot support job type '%s'", elasticjob.getclass().getcanonicalname());
}
2、作業啟動之前,會先檢查job的執行環境,主要是檢查本機(作業伺服器)與註冊中心的時間誤差(秒),是否在允許範圍.
即max-time-diff-seconds屬性,
獲取zk的時間,是在作業節點下建立永久節點systemtime/current,獲取該節點的屬性mtime
3、獲取分片資訊
4、分片完成之後,會獲取本機對應的分片項及例項,根據ip來選擇,最終將屬於本機的分片項,封裝為shardingcontexts返回;
5、litejobfacade.beforejobexecuted埋點,用來供使用者配置了自定義的listener,在job執行之前執行;
6、註冊job開始執行的資訊,即建立節點shardings/分片序號/running節點
7、執行作業:
//分片多執行緒處理
final countdownlatch latch = new countdownlatch(items.size());
for (final int each : items)
executorservice.submit(new runnable() finally
}});
}try catch (final interruptedexception ex)
作業執行類圖:
elastic job 執行原理
elastic job執行原理 1 如果只有乙個分片的情況下,就是和原生的quartz一樣的,就是所有的任務都在一台機器上面執行 2 如果有兩個分片的情況下,然後5個job在兩台機器上面執行 機器 machine1,machine2 job job1,job2,job3,job4,job5 分片 s...
Elastic Job任務重複執行問題解決
關於elastic job的使用和介紹請檢視我之前的文章 房價網是怎麼使用分布式作業框架elastic job 當前使用的版本是 2.1.5 最近在重新發布任務 時出現了乙個很詭異的問題,就是我重啟任務程式後,大概1分鐘左右吧,之前執行過的任務又重新執行了一遍,我那些任務都是凌晨跑的,我中午重啟程式...
redis學習筆記三 redis命令的執行過程
redis 是單執行緒應用,它是如何與多個客戶端簡歷網路鏈結並處理命令的?由於 redis 是基於 i o 多路復用技術,為了能夠處理多個客戶端的請求,redis 在本地為每乙個鏈結到 redis 伺服器的客戶端建立了乙個 redisclient 的資料結構,這個資料結構包含了每個客戶端各自的狀態和...