Elasitc job 3.0隨筆

? ? ? ? ?ElasticJob 社區(qū)在經(jīng)過之前幾年的停滯狀況之后并入到apache迄本,并且作為 Apache ShardingSphere 的子項(xiàng)目繼續(xù)發(fā)光發(fā)熱杂腰,終于迎來了它的3.0時(shí)代,作為一個(gè)老碼農(nóng)我也趕緊跟著時(shí)代的腳本铺敌,進(jìn)行了一次深入學(xué)習(xí)和研究,這里記錄下學(xué)習(xí)筆記。

首先elasticjob底層還是基于quartz實(shí)現(xiàn)的历等,熟悉quartz的朋友都知道quartz有三個(gè)非常重要的概念:

1、scheduler是一個(gè)計(jì)劃調(diào)度器容器辟癌,容器里面可以有眾多的JobDetail和trigger寒屯,當(dāng)容器啟動后,里面的每個(gè)JobDetail都會根據(jù)trigger按部就班自動去執(zhí)行黍少。

2寡夹、JobDetail是一個(gè)可執(zhí)行的工作,它本身可能是有狀態(tài)的厂置。

3菩掏、Trigger代表一個(gè)調(diào)度參數(shù)的配置,什么時(shí)候去調(diào)昵济。

當(dāng)JobDetail和Trigger在scheduler容器上注冊后智绸,形成了裝配好的作業(yè)(JobDetail和Trigger所組成的一對兒)野揪,就可以伴隨容器啟動而調(diào)度執(zhí)行了。

scheduler是個(gè)容器传于,容器中有一個(gè)線程池囱挑,用來并行調(diào)度執(zhí)行每個(gè)作業(yè),這樣可以提高容器效率沼溜。

elasticjob3.0.0相較之前不同之處

1平挑、通過閱讀官網(wǎng)發(fā)現(xiàn)elasticjob3.0.0新增了http類型的作業(yè),可以直接調(diào)用http請求系草,并在請求頭中將分片上下文以json串的形式傳遞通熄,同時(shí)也增加了HttpJobExecutor來支撐HttpJob的執(zhí)行

我們看看官網(wǎng)上的一段代碼

文檔關(guān)于這部分的介紹就寥寥數(shù)筆,沒有寫得很細(xì)致找都。

不過通過自己寫個(gè)demo來體驗(yàn)再加上結(jié)合之前用ElasitcJob的經(jīng)驗(yàn)仔細(xì)想想唇辨,個(gè)人總結(jié)了一下這樣做的好處:之前都是將job任務(wù)處理的核心邏輯集中在job服務(wù)本身,job不僅要負(fù)責(zé)調(diào)度還需要處理核心業(yè)務(wù)邏輯能耻,這樣做之后job服務(wù)本身只需關(guān)注任務(wù)的調(diào)度和管理赏枚,核心邏輯可以分離到其他服務(wù)中去,有助于縷清微服務(wù)盛行的當(dāng)下業(yè)務(wù)邊界問題同時(shí)減少job服務(wù)本身的壓力晓猛。

2饿幅、job監(jiān)聽器采用SPI的方式由ElasticJobServiceLoader來進(jìn)行加載和管理

再來看官網(wǎng)上的一段代碼

上面就調(diào)用了ScheduleJobBootstrap類的schedule()方法,job的啟動就是從這里開始的戒职,我們看看這個(gè)方法

繼續(xù)跟進(jìn)去發(fā)現(xiàn)是調(diào)用了JobScheduleController的scheduleJob(String corn)方法

發(fā)現(xiàn)調(diào)用了scheduler的start方法栗恩,而scheduler是quartz的任務(wù)調(diào)度器,到這里就接上了quartz的任務(wù)調(diào)度過程洪燥,有沒有瞬間就懂了磕秤?

接下來我們關(guān)注下job的線程池,查看了下demo在執(zhí)行job的調(diào)用棧

關(guān)注一下SimpleThreadpool捧韵,QuartzSchedulerThread市咆,JobRunShell,LiteJob這4個(gè)類

其中QuartzSchedulerThread是一個(gè)線程類纫版,負(fù)責(zé)查詢并觸發(fā)Triggers床绪,該線程類的主要工作分為以下幾個(gè)步驟:

1、等待QuartzScheduler啟動

2其弊、查詢待觸發(fā)的Trigger

3癞己、等待Trigger觸發(fā)時(shí)間到來

4、觸發(fā)Trigger

5梭伐、循環(huán)上述步驟

具體的源碼我將在單獨(dú)的文章中進(jìn)行解析痹雅,這里不再展開。

在底部發(fā)現(xiàn)由quartz的SimpleThreadpool拉起的糊识,而這個(gè)線程池是由StdSchedulerFactory完成初始化的

看下StdSchedulerFactory的instantiate()方法绩社,SimpleThreadpool和QuartzSchedulerThread都是這個(gè)方法中初始化的

可以看到QuartzScheduler構(gòu)造方法中初始化了QuartzSchedulerThread并在線程池中啟動

我們看下QuartzSchedulerThread的run方法

這里getThreadPool獲取的線程池就是前面所述的 SimpleThreadPool摔蓝,調(diào)用runInThread方法傳入JobRunShell線程對象,并將JobRunShell賦值給SimpleThreadPool內(nèi)部類定義的工作線程 愉耙,進(jìn)入runInThread方法之后啟動了SimpleThreadPool內(nèi)部類定義的工作線程?

在WorkThread的run方法中調(diào)用了JobRunShell的run方法贮尉,

這里的job就是LiteJob

這里實(shí)際上調(diào)用的是ElasticJobExecutor的execute方法,進(jìn)入到方法里面

1朴沿、檢查job執(zhí)行環(huán)境

2猜谚、job執(zhí)行前的處理

3、正常執(zhí)行job

4赌渣、如果發(fā)生misfire則執(zhí)行job

5魏铅、job執(zhí)行后的處理

這里2和5就是調(diào)用ElasticJobListener進(jìn)行處理的,經(jīng)過輪詢監(jiān)聽器然后調(diào)用對應(yīng)的方法跟進(jìn)execute方法最后發(fā)現(xiàn)調(diào)用的是JobItemExecutor.process方法 坚芜,那前面我們知道有 SimpleJob览芳、DataFlowJob、ScriptJob鸿竖、HttpJob四種不同類型的作業(yè)沧竟,這個(gè)方法是怎么處理這四種不同的作業(yè)的呢?然后JobItemExecutor也是elasitcJob提供的一個(gè)接口缚忧,也是采用SPI的方式進(jìn)行擴(kuò)展的 屯仗,根據(jù)不同的job類型加載不同的作業(yè)處理器進(jìn)行對應(yīng)作業(yè)的處理,我們來看看它的類結(jié)構(gòu)

有興趣的同學(xué)可以看看對應(yīng)的job處理器是怎么處理作業(yè)的搔谴,這里就不再展開了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末桩撮,一起剝皮案震驚了整個(gè)濱河市敦第,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌店量,老刑警劉巖芜果,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異融师,居然都是意外死亡右钾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門旱爆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舀射,“玉大人,你說我怎么就攤上這事怀伦〈嘌蹋” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵房待,是天一觀的道長邢羔。 經(jīng)常有香客問我驼抹,道長,這世上最難降的妖魔是什么拜鹤? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任框冀,我火速辦了婚禮,結(jié)果婚禮上敏簿,老公的妹妹穿的比我還像新娘明也。我一直安慰自己,他們只是感情好极谊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布诡右。 她就那樣靜靜地躺著,像睡著了一般轻猖。 火紅的嫁衣襯著肌膚如雪帆吻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天咙边,我揣著相機(jī)與錄音猜煮,去河邊找鬼。 笑死败许,一個(gè)胖子當(dāng)著我的面吹牛王带,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播市殷,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼愕撰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了醋寝?” 一聲冷哼從身側(cè)響起搞挣,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎音羞,沒想到半個(gè)月后囱桨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嗅绰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年舍肠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窘面。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翠语,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出财边,到底是詐尸還是另有隱情啡专,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布制圈,位于F島的核電站们童,受9級特大地震影響畔况,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜慧库,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一跷跪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧齐板,春花似錦吵瞻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至济舆,卻和暖如春卿泽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滋觉。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工签夭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人椎侠。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓第租,卻偏偏與公主長得像,于是被迫代替她去往敵國和親我纪。 傳聞我的和親對象是個(gè)殘疾皇子慎宾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 任務(wù)調(diào)度簡介 1、什么時(shí)候需要任務(wù)調(diào)度 業(yè)務(wù)場景:1)賬單日或者還款日上午 9 點(diǎn)浅悉,給每個(gè)信用卡客戶發(fā)送賬單通知璧诵,...
    vincent浩哥閱讀 2,037評論 0 0
  • 本文是根據(jù) Quartz定時(shí)器官方文檔翻譯的,只翻譯了第1到第10課仇冯,如有翻譯不精確的地方,請讀者指正族操,互相學(xué)習(xí)苛坚,...
    ChinaXieShuai閱讀 8,316評論 1 19
  • 1. 目標(biāo) 把定時(shí)任務(wù)通過集群的方式進(jìn)行管理調(diào)度,并采用分布式部署色难,保證系統(tǒng)的高可用泼舱,提高了容錯(cuò)。那么如何保證定時(shí)...
    偶像本人閱讀 36,792評論 4 69
  • 導(dǎo)語:作為java領(lǐng)域最受歡迎的任務(wù)調(diào)度庫之一枷莉,quartz為開發(fā)者提供了豐富的任務(wù)調(diào)度功能娇昙,比如讓某段程序在每天...
    star24閱讀 23,793評論 8 60
  • 夜鶯2517閱讀 127,717評論 1 9