今天假期第一天,研究了.NET 5開源工做流框架elsa,如今分享給你們。javascript
1、框架簡介前端
elsa是一個開源的.NET Standard 工做流框架,官方網站:https://elsa-workflows.github.io/elsa-core/java
如下列出了Elsa的一些關鍵功能:node
2、產品主要功能python
1. 可視化的工做流編輯器git
Elsa帶有一個獨立的,可重複使用的HTML5工做流設計器Web組件,您能夠將其嵌入本身的HTML網頁中。設計器徹底在客戶端運行,並具備豐富的JavaScript API,該API可以讓您定義自定義插件以擴展其功能。github
2. Dashboard 看板web
Elsa看板使您可以定義工做流程定義並檢查執行的工做流程。要設計工做流程,只需右鍵單擊畫布,從活動選擇器中選擇一個活動,對其進行配置,而後拖動多個活動之間的鏈接以建立從簡單的短時間運行的工做流程到高級的長期運行的工做流程的流程。數據庫
3. 支持長期和短時間的工做流模式npm
Elsa提供了短時間和長期工做流程。能夠理解爲簡單的和複雜的流程設計
例如,當您須要實現業務規則引擎時,短時運行的工做流程很是有用,在該流程中,若是工做流程是一個接收輸入並返回結果的函數,則能夠從應用程序中調用它。
長時間運行的工做流可以輕鬆地實現涉及人和機器的複雜過程。長期運行過程的典型示例是文檔批准工做流,其中某些文檔的審閱過程涉及多方。這樣的工做流程可能涉及計時器,電子郵件,提醒,HTTP請求,用戶操做等。
4. 豐富的工做流活動
基本元語:是低級的技術活動。
控制流:控制流活動提供對過程的控制。例如,Fork活動會將工做流程分爲兩個或多個執行分支。
工做流活動:活動表明工做流程中的單個步驟。開箱即用的Elsa NuGet套件套件爲您提供了一系列不錯的活動,主要包含如下工做流活動
工做流程:工做流類別中的活動與工做流級別的功能相關,例如相關性和信令。
控制檯活動:在實施帶有工做流的基於控制檯的應用程序時,控制檯活動很是有用。
DropBox活動:Dropbox活動可幫助實現與Dropbox API集成。
電子郵件活動:電子郵件活動容許您使用SMTP發送電子郵件。
HTTP活動:可以實現發送傳出HTTP請求並響應傳入HTTP請求的工做流,很是適合與基於外部Web的API集成。
定時器活動:定時器活動能夠基於某些基於時間的事件(例如CRON表達式,常規計時器)或在未來的特定時間觸發工做流。
User Task:用戶任務事件是用戶自定義配置的活動,用戶能夠執行一系列可能的操做。每一個動做對應於活動的結果。用戶執行任何這些操做後,工做流將沿適當的路徑恢復。這裏的想法是您的應用程序將使用選定的操做觸發工做流。
例如,這能夠表示爲一組簡單的按鈕。由您的應用程序決定如何呈現這些操做。
5. 版本控制
每一個工做流程定義都是版本化的。發佈工做流程的新版本時,其版本號會增長。現有工做流程實例仍將使用工做流程定義的先前版本,但新工做流程將使用最新版本。
6. 持久化支持
CosmosDB (DocumentDB)
Entity Framework Core:各種關係型數據庫,支持SQLServer
Memory:Non-persistent, use only for tests and/or short-lived workflows.
MongoDB
YesSQL
7. 表達式
工做流活動可使用表達式,這些表達式能夠炸運行時執行,使用表達式能夠引用其餘活動產生的值。Elsa支持如下三種相似的表達式:
文字表達式:
文字表達式不是一個真正的解釋,當你須要設置,無需運行時計算活動屬性的值纔會被使用。
JavaScript表達式:
當你須要計算一些數值或讀取工做流程中的過程值時一般使用JavaScript表達式。
液體表達式(這個名字很奇怪,目前還在研究中)
當你須要建立一個HTTP請求,HTTP響應的計算一般使用流式表達式,或例如其中主體被標記使用液體發送電子郵件時。
3、產品擴展能力
Elsa的最重要和最強大的功能之一就是其可擴展性。
1. 工做流活動
許多過程是特定業務領域的,而且可以使用表明業務領域的特定語言的一組活動來建立工做流是一項強大的功能。
用特定領域的活動擴展Elsa很是簡單。只需實現一個繼承自C#的C#類,Activity並在服務容器中註冊它,就可使用了。活動將在工做流設計器中自動變爲可用,而且默認狀況下其全部公共屬性都是可編輯的。
2. 持久化擴展
Elsa附帶了許多持久性提供程序,例如內存,EF Core,MongoDB,YesSQL和CosmosDB。儘管這些提供程序應知足最多見的需求,但固然不限於這些。實現IWorkflowDefinitionStore爲工做流定義提供定製存儲,並實現IWorkflowInstanceStore爲工做流實例提供定製存儲。請注意,用戶能夠混合和匹配,這意味着您能夠例如將EntityFrameworkCoreWorkflowDefinitionStorefor用於工做流定義``。
3. JavaScript函數
JavaScript表達式附帶了一些您可能常用的有用的JavaScript函數。例如,它容許您從工做流程中讀取變量並引用活動輸出值。可是,若是您發現本身須要其餘功能,則能夠很容易地從您本身的應用程序中擴展功能集。
4. 液體表達式
Liquid表達式還附帶了一些可能常用的有用過濾器。例如,它容許您從工做流程中讀取變量並引用活動輸出值。可是,若是您發現本身須要其餘功能,能夠很容易地從您本身的應用程序中擴展過濾器集。
5. 表達式解析執行
也許JavaScript和Liquid還不夠好,可使用用C#,VBScript或Python編寫表達式。只需實現您本身的版本IExpressionEvaluator,便可在服務容器中註冊它,便可在任何活動中使用自定義評估程序語法。
4、與Windows Workflow Foundation對比
目前,微軟已經中止更新發展 Windows Workflow Foundation,同時技術社區也在努力作WF to .NET Standard, 可是elsa有如下2點優點:
5、源代碼編譯構建
項目源代碼地址:https://github.com/elsa-workflows/elsa-core
經過VS2019,使用克隆的方式,將代碼克隆到本地編譯構建。
項目使用了Angular,在調試運行前,本地須要完成NPM包安裝和JS 編譯,因此本地須要先安裝NodeJS
切換到XX\src\dashboard\Elsa.Dashboard\Theme\argon-dashboard, 執行NPM Install
安裝過程當中,涉及到Python相關的組件和環境變量配置,因此可能會安裝失敗,出現異常:
checking for Python executable "python2" in the PATH Can't find Python executable "python2.7", you can set the PYTHON env variable.
此時,先刪除delete node_modules文件夾
, 而後執行: npm install --global windows-build-tools
python組件安裝完成後,執行如下命令:
npm config set python C:\Users\zhougq\.windows-build-tools\python27\python.exe npm install
NPM Install成功後,在目錄src\dashboard\Elsa.Dashboard\Theme\argon-dashboard下執行如下指令:gulp build
此時elsa Dashboard前端項目所有編譯經過。
接下來能夠經過:
VS:Elsa.Dashboard.Web 項目工程調式
也能夠在Elsa.Dashboard.Web文件件下運行dotnet run
.
瀏覽器中直接訪問:http://localhost:port/elsa/home,就可使用了elsa了。
以上是對elsa的初步研究,分享給你們。
周國慶
2021/1/1