[.NET專案實戰] Elsa開源工作流元件應用(一): Elsa工作流簡介

林晓lx發表於2024-03-15

Elsa工作流簡介

工作流是什麼?

引用維基百科中對工作流的解釋:

是對工作流程及其各操作步驟之間業務規則的抽象、概括、描述。工作流建模,即將工作流程中的工作如何前後組織在一起的邏輯和規則在計算機中以恰當的模型進行表示並對其實施計算

Elsa 是一個功能強大的工作流庫,支援在任何 .NET 應用程式中執行工作流。Elsa 可以使用C#程式碼或使用基於Web的視覺化設計器生成JSON等方式定義工作流程。

Elsa 可用於多種場景,包括:

  • 長時間執行的工作流程,例如訂單履行和產品批准。
  • 執行時間較短的工作流程,例如傳送電子郵件和生成 PDF。
  • 計劃的工作流,例如傳送每日報告。
  • 事件驅動的工作流,例如在使用者註冊時傳送歡迎電子郵件。

Elsa免費且開源,並且有較完善的文件,瞭解更多請訪問官網官方倉庫

工作流的基本概念

要定義一個工作流,需要包含兩個最基本的資訊:

  1. 對一系列任務的執行過程的描述;
  2. 各任務之間執行關係的描述。

在Elsa中,這些被抽象為:

  1. 活動(Activity): 執行任務的實體,如:寫入文字、傳送郵件、執行SQL、執行HTTP請求等;
  2. 工作流(Workflow):包含多個活動,以及活動之間的執行關係, 如:並行、序列、分支、迴圈等;

有了活動和工作流,就可以描述一個任務的執行過程了。但為了滿足業務的複雜性,Elsa還引入了更多的功能和概念。

上下文系統

活動的本質是執行任務,任務的執行需要資料支援,或返回結果。下游的任務也可能依賴於上游任務的返回結果,如:一個傳送執行結果郵件任務,需要知道接收資訊和前一個任務的執行結果。上下文系統就是用來支援任務執行過程中的資料傳遞的。

上下文系統包括:

  • 變數(Variable)
  • 工作流輸入/輸出(Input/Output)
  • 活動輸入/輸出
  • 結果(OutCome)

阻斷/恢復功能

一些場景下,任務不會連續執行,需要暫停任務,任務恢復後,需要繼續執行。
這些場景包括:

  • 延時觸發,或按計時器規則觸發的任務;
  • 接收到某個訊息才執行的任務。

這些功能在Elsa中使用書籤(Bookmark)事件(Event)等型別實現。

設計器(Designer)

硬編碼的方式已經無法滿足複雜的業務場景,設計器可以將工作流設計為一個圖形化的介面,使用者可以拖拽活動,連線,設定活動的屬性;活動被打包成一個節點(Node),與活動之間的連線表示活動之間的依賴關係。

在這裡插入圖片描述

定義(Definition)與例項化(Instance)

工作流定義描述了一個工作流的結構,比如:名稱,變數,包含的活動等,可以理解為一個工作流的模板。

工作流定義在Elsa初始化時會“註冊” 到資源池中,每個工作流定義都有一個唯一的ID。

使用設計器生成的工作流,透過序列化成JSON字串,並持久化到資料庫。
使用硬編碼建立的工作流,在Elsa初始化時將工作流注冊到工作流定義並持久化到資料庫。

例項化是根據定義建立一個工作流的例項,工作流例項包含工作流狀態(WorkflowState)以及活動例項(ActivityState)。與定義一樣,它們透過序列化成JSON字串,並持久化到資料庫。當程式重新啟動時,會從資料庫中恢復工作流例項。

相關文章