今天假期第一天,研究了.NET 5开源工作流框架elsa,现在分享给大家。
一、框架简介
elsa是一个开源的.NET Standard 工作流框架,官方网站:https://elsa-workflows.github.io/elsa-core/
以下列出了Elsa的一些关键功能:
小巧,简单,快速。该库非常精简易用,同时快速执行并且易于通过自定义活动进行扩展。
调用任意工作流程,就好像它们是我应用程序的功能一样。
触发事件,使相应的工作流程基于该事件自动启动/恢复。
支持长期运行的工作流程。当工作流程执行并遇到需要进行例如用户输入后,工作流将停止,保留并耗尽内存,直到可以恢复为止。这可能是几秒钟后,几分钟,几小时,几天甚至几年的时间。
将工作流与特定于应用程序的数据相关联。这是长时间运行的工作流程的关键要求。
以基于文件的格式存储工作流,因此我可以使其成为源代码管理的一部分。
当我不想让工作流成为源代码管理的一部分时,可以将其存储在数据库中。
基于Web版本的流程设计器。无论是将工作流存储在文件系统还是数据库中,还是将设计器在线托管还是仅在本地计算机上托管,都需要能够在线编辑工作流。
使用表达式配置工作流程活动。通常,工作流处理的信息本质上是动态的,活动需要一种与该信息进行交互的方式。工作流表达式支持这类场景。
可通过特定于应用程序的活动,支持自定义存储和脚本引擎进行扩展。
调用其他工作流程。这允许从各种工作流程中调用可重用的应用程序逻辑。就像从C#调用通用功能一样。
查看和分析执行的工作流程实例。查看工作流采用的路径,运行时状态,发生故障的位置并补偿发生故障的工作流。
支持Web的工作流设计器嵌入我自己的仪表板应用程序中。可以选择创建一个运行所有应用程序逻辑的工作流主机,还可以选择在单个微服务中托管工作流运行时(允许进行编排和编排)。
关注点分离:工作流核心库,运行时和设计器设计上完全分离。即当工作流宿主不应该依赖于基于Web的设计器时。例如,这允许您实施基于桌面的设计器,或者根本不使用设计器,而仅使用YAML文件。最后,主机只需要工作流程定义和对持久性存储的访问。
支持本地或云端管理,因为Elsa只是您从应用程序引用的一组NuGet软件包。
二、产品主要功能
1. 可视化的工作流编辑器
Elsa带有一个独立的,可重复使用的HTML5工作流设计器Web组件,您可以将其嵌入自己的HTML网页中。设计器完全在客户端运行,并具有丰富的JavaScript API,该API可让您定义自定义插件以扩展其功能。
2. Dashboard 看板
Elsa看板使您能够定义工作流程定义并检查执行的工作流程。要设计工作流程,只需右键单击画布,从活动选择器中选择一个活动,对其进行配置,然后拖动多个活动之间的连接以创建从简单的短期运行的工作流程到高级的长期运行的工作流程的流程。
3. 支持长期和短期的工作流模式
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