Elastic Job學習(三)執行作業

2021-09-12 21:50:13 字數 1386 閱讀 8542

流程圖:

******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 的資料結構,這個資料結構包含了每個客戶端各自的狀態和...