.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

相关文章
相关标签/搜索