xxl-job之實現流程任務編排思路

xuanhaoo發表於2021-02-06

背景

   某一天一如既往的上班”旅途“中,我的領導在開早會的時候,說我最近沒啥事,於是讓我研究一下Activiti工作流引擎與Drools規則引擎,當時也不知道後邊具體要做什麼,管它的,先看看再說。看了幾天後,寫了個簡單的demo出來,結果發現Activiti這個東西不就是可以用來做流程審批的嘛;最後我們就開始開發基於Activiti的工作流引擎。並且部分功能與定時任務排程中心進行整合,實現了簡單的流程編排任務。

因為工作流相關的東西在公司的電腦上,公司對於安全保密性十分嚴格,所以本文不闡述具體實現,只記錄一下我當時的實現思路。

   排程中心本身有一個子任務的概念,但子任務是有先後順序的,所以這裡不太符合需求。在xxl-job的github上我看到過這樣一個issue:

看來還是很多人想要這個功能呢,目前我們先自己實現一個簡單的流程任務編排。

實現思路

概念描述

   因為涉及到了工作流的東西,在此處只簡單介紹一下Activiti工作流引擎。

工作流(WorkFlow),就是”業務過程的部分或整體在計算機應用環境下的自動化“,它主要解決的是”使在多個參與者之間按照某種預定義的規則傳遞文件、資訊或任務的過程自動進行,從而實現某個預期的業務目標,或者促使此目標的實現“,簡單的說:工作流將一套大的業務邏輯分解成業務邏輯段,並統一控制這些業務邏輯段的執行條件,執行順序以及相互通訊。實現業務邏輯的分解和解耦。

關鍵概念:

  • 服務節點:使用者任務,服務任務,接受任務,指令碼任務等
  • 閘道器節點:互斥閘道器,並行閘道器等
  • 邏輯判斷節點:類似於if/else

   我們在工作流的開發中主要是包裝了服務節點以及閘道器節點和邏輯節點等內容,讓服務節點類似於一個http網路請求,觸發微服務的介面,同時等待微服務介面返回內容,放入到流程中,執行後邊的流程。

思路設計

   我在開發排程中心的工作流模式時時通過SDK的方式引入工作流模式,減少系統間的耦合,實現工作流模式後可以做一些簡單的編排任務,比如多個Jobhandler的組合執行方式。

   下面是方案的設計思路:

   大致就是:排程中心與工作流系統之間通過SDK的方式進行通訊,排程中心的任務和工作流的任務是相同概念的,都是一次完整的觸發過程。排程中心的執行器對應於工作流的服務任務節點,在工作流節點端可以配置相應的Jobhandler,當要執行定時任務時,會首先通過SDK觸發工作流任務開始執行,然後執行到排程中心端,在排程中心端去觸發相應的業務端相應的Jobhandler,達到執行多工的效果。

   當任務執行完成後我們去回撥工作流獲取任務狀態介面以此來同步排程中心任務的執行狀態。

注意點:在我們選擇工作流模式配置定時任務的時候,我們不再需要填寫Jobhandler引數,只需要繫結工作流的啟動key即可,作圖的時候直接在服務節點上填寫Jobhandler引數。

說明

   大體上的思路就是這樣,可能比較粗略還有點抽象...,本來想結合一些實際的頁面UI以及程式碼來說明,但因涉及到公司安全的問題,所以只能這樣了,因為如果我要本地弄這些,工程量實在有點巨大...
   本篇文章記錄了一下當時的思路,大致上有這麼一種方式可以來實現簡單功能,但是增加了一些學習成本,比如工作流引擎相關知識

相關文章