前言:審批流程中常見的都是人工類型任務,但是也會有一些自動化的任務需要定時觸發。因此,引擎框架中需要解決掉兩個問題:選擇合適的任務調度框架,集成新的任務調度模塊。 1. 任務調度框架選擇 Hangfire 是一個開源的.NET任務調度框架,目前1.6+版本已支持.NET Core。 基於隊列的任務處 ...
前言:審批流程中常見的都是人工類型任務,但是也會有一些自動化的任務需要定時觸發。因此,引擎框架中需要解決掉兩個問題:選擇合適的任務調度框架,集成新的任務調度模塊。
1. 任務調度框架選擇
Hangfire 是一個開源的.NET任務調度框架,目前1.6+版本已支持.NET Core。
基於隊列的任務處理(Fire-and-forget jobs)
延遲任務執行(Delayed jobs)
定時任務執行(Recurring jobs)
延續性任務執行(Continuations)
Hangfire用的是開源的NCrontab組件,通過Cron 表達式語法,可以指定非常靈活的定時任務類型。
1) 官方網站地址
https://www.hangfire.io/
2) ASP.NET 網站支持
http://docs.hangfire.io/en/latest/installation.html
包括安裝和部署,資料庫設置等。
安裝步驟說明:
http://docs.hangfire.io/en/latest/installation.html
3) 資料庫
在HangFire的NuGet包安裝過程中,HangFire資料庫腳本會自動生成HangFireDB,或者也可以手工生成資料庫。
2. 流程設計器支持CRON表達式編輯
CRON表達式編輯開源項目地址:
https://github.com/LGX9/cron-expression-editor
3. 任務調度模塊(Slickflow.Schedule)
3.1 流程逾期自動完成
1) 資料庫欄位
流程實例表WfProcessInstance中有流程實例“逾期時間”和“逾期處理時間”欄位信息,用於記錄任務調度數據。
2) 邏輯描述
在流程啟動或者中間狀態時,更新流程實例的逾期時間,這樣後臺定時作業任務會檢測流程實例表中有沒有逾期的流程實例,如果存在,則自動設置流程實例為終結狀態。
3) 任務隊列添加
3.2 流程定時啟動
1) 資料庫欄位
流程定義表(WfProcess)表中欄位包含“是否定時啟動?”和“定時啟動CRON表達式”欄位。用於定義定時任務觸發信息。
2) 定時啟動流程節點
3) 加入定時任務隊列
4. 任務調度監視面板(Dashboard)
5. 總結
集成HangFire任務調度框架,使得Slickflow引擎產品可以支持自動處理的節點任務類型,也增強了流程的任務自動化處理能力;同時HangFire組件的健壯性和跨平臺性,可以滿足大多數企業級客戶的業務需求和大批量作業調度請求。