.NET 5 開源工做流框架elsa技術研究

今天假期第一天,研究了.NET 5開源工做流框架elsa,如今分享給你們。javascript

1、框架簡介前端

elsa是一個開源的.NET Standard 工做流框架,官方網站:https://elsa-workflows.github.io/elsa-core/java

如下列出了Elsa的一些關鍵功能:node

  • 小巧,簡單,快速。該庫很是精簡易用,同時快速執行而且易於經過自定義活動進行擴展。
  • 調用任意工做流程,就好像它們是我應用程序的功能同樣。
  • 觸發事件,使相應的工做流程基於該事件自動啓動/恢復。
  • 支持長期運行的工做流程。當工做流程執行並遇到須要進行例如用戶輸入後,工做流將中止,保留並耗盡內存,直到能夠恢復爲止。這多是幾秒鐘後,幾分鐘,幾小時,幾天甚至幾年的時間。
  • 將工做流與特定於應用程序的數據相關聯。這是長時間運行的工做流程的關鍵要求。
  • 以基於文件的格式存儲工做流,所以我可使其成爲源代碼管理的一部分。
  • 當我不想讓工做流成爲源代碼管理的一部分時,能夠將其存儲在數據庫中。
  • 基於Web版本的流程設計器。不管是將工做流存儲在文件系統仍是數據庫中,仍是將設計器在線託管仍是僅在本地計算機上託管,都須要可以在線編輯工做流。
  • 使用表達式配置工做流程活動。一般,工做流處理的信息本質上是動態的,活動須要一種與該信息進行交互的方式。工做流表達式支持這類場景。
  • 可經過特定於應用程序的活動,支持自定義存儲和腳本引擎進行擴展。
  • 調用其餘工做流程。這容許從各類工做流程中調用可重用的應用程序邏輯。就像從C#調用通用功能同樣。
  • 查看和分析執行的工做流程實例。查看工做流採用的路徑,運行時狀態,發生故障的位置並補償發生故障的工做流。
  • 支持Web的工做流設計器嵌入我本身的儀表板應用程序中。能夠選擇建立一個運行全部應用程序邏輯的工做流主機,還能夠選擇在單個微服務中託管工做流運行時(容許進行編排和編排)。
  • 關注點分離:工做流核心庫,運行時和設計器設計上徹底分離。即當工做流宿主不該該依賴於基於Web的設計器時。例如,這容許您實施基於桌面的設計器,或者根本不使用設計器,而僅使用YAML文件。最後,主機只須要工做流程定義和對持久性存儲的訪問。
  • 支持本地或雲端管理,由於Elsa只是您從應用程序引用的一組NuGet軟件包。

2、產品主要功能python

   1. 可視化的工做流編輯器git

    Elsa帶有一個獨立的,可重複使用的HTML5工做流設計器Web組件,您能夠將其嵌入本身的HTML網頁中。設計器徹底在客戶端運行,並具備豐富的JavaScript API,該API可以讓您定義自定義插件以擴展其功能。github

    

   2. Dashboard 看板web

   Elsa看板使您可以定義工做流程定義並檢查執行的工做流程。要設計工做流程,只需右鍵單擊畫布,從活動選擇器中選擇一個活動,對其進行配置,而後拖動多個活動之間的鏈接以建立從簡單的短時間運行的工做流程到高級的長期運行的工做流程的流程。數據庫

  3. 支持長期和短時間的工做流模式npm

   Elsa提供了短時間和長期工做流程。能夠理解爲簡單的和複雜的流程設計

   例如,當您須要實現業務規則引擎時,短時運行的工做流程很是有用,在該流程中,若是工做流程是一個接收輸入並返回結果的函數,則能夠從應用程序中調用它。

   長時間運行的工做流可以輕鬆地實現涉及人和機器的複雜過程。長期運行過程的典型示例是文檔批准工做流,其中某些文檔的審閱過程涉及多方。這樣的工做流程可能涉及計時器,電子郵件,提醒,HTTP請求,用戶操做等。

 4. 豐富的工做流活動

     基本元語:是低級的技術活動。

  • SetVariable

      控制流:控制流活動提供對過程的控制。例如,Fork活動會將工做流程分爲兩個或多個執行分支。

  • ForEach
  • Fork
  • IfElse
  • Join
  • Switch
  • While

     工做流活動:活動表明工做流程中的單個步驟。開箱即用的Elsa NuGet套件套件爲您提供了一系列不錯的活動,主要包含如下工做流活動

     工做流程:工做流類別中的活動與工做流級別的功能相關,例如相關性和信令。

  • Correlate
  • Finish
  • Signaled
  • Start
  • TriggerSignal
  • TriggerWorkflow

      控制檯活動:在實施帶有工做流的基於控制檯的應用程序時,控制檯活動很是有用。

  • ReadLine
  • WriteLine

      DropBox活動:Dropbox活動可幫助實現與Dropbox API集成。

  • SaveToDropbox

      電子郵件活動:電子郵件活動容許您使用SMTP發送電子郵件。

  • SendEmail

       HTTP活動:可以實現發送傳出HTTP請求並響應傳入HTTP請求的工做流,很是適合與基於外部Web的API集成。

  • ReceiveHttpRequest
  • SendHttpRequest
  • WriteHttpResponse

      定時器活動:定時器活動能夠基於某些基於時間的事件(例如CRON表達式,常規計時器)或在未來的特定時間觸發工做流。

  • CronEvent
  • InstantEvent
  • TimerEvent

       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點優點:

  • Elsa intrinsically supports triggering events that starts new workflows and resumes halted workflow instances in an easy to use manner. E.g. workflowHost.TriggerWorkflowAsync("HttpRequestTrigger");"will start and resume all workflows that either start with or are halted on the HttpRequestTrigger.Elsa has a web-based workflow designer. I once worked on a project for a customer that was building a huge SaaS platform.
  • One of the requirements was to provide a workflow engine and a web-based editor.Although there are commercial workflow libraries and editors out there, the business model required open-source software. We used WF and the re-hosted Workflow Designer. It worked, but it wasn't great.

  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

相關文章
相關標籤/搜索