天天看點

Java任務排程架構----kunka

初衷

  1. 工作中用到了很多架構,但是給我印象最深的還是我們PO(Product Owner)在若幹年前寫的一套任務排程架構,在JDK1.4之前,concurrent包還沒有引入,

    手寫的這套Token排程,去年我們依然在使用,并且滿足了商用軟體的各種要求。

  2. 架構本身是可行的,但是也存在一些問題,比如,技術陳舊、互相引用、層次冗雜、不易讀等。
  3. 前車之鑒,并且結合我涉及的另外一套内部架構(讀寫架構),我想重新設計并實作一套新的任務排程架構。
  4. 取名為kunka,純屬雷同,并且i really have fun to do this.

概念

  1. Task,任務,最小排程和執行機關,執行内容,使用者自定義
  2. Executor,執行器,執行Task,根據執行方式分為,串行執行器,并發執行器,定時執行器,多子任務執行器等
  3. Dispather,排程器,負責排程,将Task放放入Executor,有自己的生命周期
  4. TaskManager, 任務管理中心,單例,負責管理是以進入待排程的Task,并管理任務狀态,并提供任務中斷接口
  5. TaskListener,任務監聽器,Task狀态變動時,會通知監聽器

架構排程流程

  1. 使用者實作一個Task,并實作對任務狀态變更的TaskListener,其中ID要對應
  2. 使用者根據需要,選擇一種執行器Executor
  3. 使用者将Task、TaskListener和Executor放入到TaskManager中
  4. 排程器開始運作,執行器接受到排程器分發的Task,并執行
  5. Task狀态變更時,通知所有注冊的TaskListener
  6. 排程器會在生命周期結束時,自動關閉,同時關閉相關的執行器

接口說明

Task
/**
     *     任務執行内容
     */
    abstract public void runTask();

    /**
     *  任務逾時處理
     */
    abstract public void timeOutAction();
    
    /**
     *  任務結束時,後置處理
     */
    abstract public void taskFinished();
           

I am a slow walker, but I never walk backwards.