1. 程式人生 > >elastic-job詳解(三):Job的手動觸發功能

elastic-job詳解(三):Job的手動觸發功能

方法 idt image blog per tle cnblogs ack display

elastic-job的任務都是使用quartz來觸發的,quartz表達式一般都是定期執行。但有時候一些周期較長的任務,比如一天一次,幾小時一次的任務,我們需要等待很久才能觸發一次。如果我們需要測試一些功能,或者說重跑一些任務的話,手動觸發任務功能就變得尤為重要,也是任務框架一般都必須要實現的特性。現在我們就來聊一聊elastic-job的手動觸發任務的功能。

觸發功能的使用

elastic-job有個管理界面console,這裏不在贅述怎麽樣部署和打開管理界面。在這個管理界面上,有個觸發按鈕,點擊這個按鈕就能觸發這個任務。

技術分享

任務定時周期是5s,當點擊觸發的時候,任務立即出發,如下圖。

技術分享

原理分析

elastic-job依靠zookeeper傳遞消息和quartz本身的觸發功能來實現遠程觸發的功能。

當點擊“觸發”按鈕時,管理頁面會從zookeeper中找到當前Job下所有的任務實例,在實例節點上寫入數據“TRIGGER”。如下圖:

技術分享

每個節點實例啟動的時候,elastic-job默認會將任務觸發監聽器JobTriggerStatusJobListener啟動,使用curator來監控instances節點的數據變化,當出現變化則觸發JobTriggerStatusJobListener的dataChanged方法。從而最終調用quartz的triggerJob方法,觸發任務。

elastic-job詳解(三):Job的手動觸發功能