.net 工作流 开源,主流的net快速开发框架
编者按:elsa是一个工作流框架,是。NET基础。2.0版本将于3月发布,目前正在开发中。2020年2月,我介绍了elsa-core,一个很棒的开源工作流。今天推荐MVP的shy landscape写的这篇详细的文章。
今天第一天,我们学习了elsa,它是。净5。现在分享给大家。
一、框架简介
Elsa是一个开源软件。net标准工作流框架,官方网站:https://Elsa-workflows.github.io/Elsa-core/
协会的主要职能如下。
小巧、简单、快捷。该库非常简单,易于使用,运行速度快,并且易于通过定制的活动进行扩展。
调用任何工作流,就像它们是我的应用程序的功能一样。
触发事件,并根据事件自动启动/恢复相应的工作流。
支持长期运行的工作流。当工作流运行并需要用户输入时,工作流将停止,内存将被保留和消耗,直到可以恢复。可能是几秒、几分钟、几小时、几天甚至几年后。
将工作流与特定于应用程序的数据相关联。这是长时间运行的工作流的一个重要要求。
工作流以基于文件的格式存储,因此它可以用作源代码控制的一部分。
如果不希望工作流成为源代码控制的一部分,可以将其保存到数据库中。
基于Web版本的流程设计器。无论是将工作流保存到文件系统或数据库,由在线设计者托管,还是仅在本地计算机上托管,工作流都必须能够在线编辑。
使用表达式设置工作流活动。通常,工作流中处理的信息本质上是动态的,活动需要方法来与这些信息进行交互。工作流表达式支持这样的场景。
APP应用特定活动支持自定义存储和脚本引擎的扩展。
调用其他工作流。这样就可以从各种工作流中调用可复用的APP应用逻辑。就像从C#调用一个通用函数一样。
查看和分析已执行工作流的实例。确定工作流使用的路径、运行时状态和失败的位置,并补偿失败的工作流。
支持web的工作流设计器内置在自己的dashboard应用程序中。你可以选择创建一个运行所有APP应用逻辑的工作流主机,也可以选择使用单个微服务来托管工作流运行时(可以有组织有组织)。
关注点分离:工作流核心库在运行时与设计者设计完全分离。这意味着如果工作流主机不应该依赖于基于Web的设计者。例如,您可以实现一个基于桌面的设计器,也可以不使用设计器而只使用YAML文件。最后,主机只需要定义工作流和访问持久存储。
Elsa只是APP应用引用的一组NuGet软件包,所以支持本地或云端管理。
二、产品主要功能
1. 可视化的工作流编辑器
Elsa有一个可重用的独立HTML5工作流设计器Web组件,可以嵌入到自己的HTML页面中。设计器完全在客户端运行,拥有丰富的JavaScript API。使用这个API,您可以定义自定义插件来扩展功能。
2. Dashboard 看板
在Elsa看板卡中,您可以定义工作流定义并检查已执行的工作流。要设计一个工作流,右键单击画布,从活动选择器中选择并设置一个活动,然后拖动多个活动之间的连接,创建一个从简单的短期运行工作流到高级的长期运行工作流的流程。
3. 支持长期和短期的工作流模式
Elsa提供短期和长期工作流程。可以理解为简单复杂的工艺设计。
例如,当需要实现业务规则引擎时,短期运行的工作流非常有用。如果工作流是接收输入并返回结果的函数,则可以从APP应用程序中调用它。
长时间运行的工作流可以轻松实现与人和机器相关的复杂流程。长期流程的一个典型示例是文档审批工作流,它可能涉及多个用户。这些工作流可能包括定时器、电子邮件、提醒、HTTP请求、用户交互等。
4. 丰富的工作流活动
基本元语:
是低级技术活动。设置变量
控制流:
控制流活动提供过程控制。例如,Fork活动将工作流分成两个或多个执行分支。福瑞克
福瑞克
条件语句
约翰
配电盘
世卫组织(世界卫生组织)
工作流活动:
个活动代表工作流中的每个步骤。现成的Elsa NuGet suite提供了优秀的活动,主要包括以下工作流活动工作流类别中的
工作流程:
活动与工作流级别的功能相关,例如依赖关系和信令。核心
完成
表示
开始
触发信号
触发器工作流
控制台活动:
使用工作流实现基于控制台的应用程序时,控制台活动非常有用。阅读线
名称
DropBox活动:
Dropbox活动可以帮助实现与Dropbox API的集成。SaveToDropbox
电子邮件活动:
电子邮件活动允许您使用SMTP发送电子邮件。发送电子邮件
HTTP活动:
可以实现发送出站HTTP请求和响应入站HTTP请求的工作流,非常适合与基于外部Web的API集成。接收http请求
SendHttpRequest
WriteHttpResponse
定时器活动
:计时器活动可以基于一些基于时间的事件(例如CRON表达式、常规计时器)或者在未来的特定时间触发工作流。克朗事件
瞬时事件
时间事件
User Task:
用户任务事件是用户自定义的活动,用户可以执行一系列可能的操作。每个动作对应于活动的结果。在用户执行任何这些操作之后,工作流将沿着适当的路径继续。这里的想法是,您的应用程序将使用选定的操作触发工作流。例如,这可以表示为一组简单的按钮。由您的应用程序决定如何呈现这些动作。
5. 版本控制
每个工作流定义都有版本。当工作流的新版本发布时,其版本号将会增加。现有工作流实例仍将使用先前版本的工作流定义,但新工作流将使用最新版本。
6. 持久化支持
宇宙数据库
实体核心:各种关系数据库,支持SQLServer。
内存:非持久性,仅用于测试和/或短期工作流。
MongoDB
YesSQL
7. 表达式
工作流活动可以使用可在运行时执行的表达式,并使用表达式来引用由其他活动生成的值。Elsa支持以下三种类似的表达方式:
文字表达式:
字面上的表达并不是真正的解释,意识夜是需要设置的,所以会在运行时不计算active属性值的情况下使用。
JavaScript表达式:
当有意识的夜晚需要计算一些数值或者读取工作流中的过程值时,通常会用到JavaScript表达式。
液体表达式(这个名字很奇怪,目前还在研究中)
有意识的夜晚需要创建一个HTTP请求,HTTP响应的计算通常使用流表达式,或者例如当主题被标记为使用液体发送电子邮件时。
三、产品扩展能力
Elsa最重要、最强大的功能之一就是它的可扩展性。
1. 工作流活动
许多流程是特定于业务领域的,能够使用一组表示业务领域特定语言的活动来创建工作流是一个强大的功能。
用特定领域的活动来扩展协会是非常简单的。只需实现一个C #类Activity,继承自C #并在服务容器中注册,就可以使用了。该活动将在工作流设计器中自动变为可用,并且默认情况下其所有公共属性都是可编辑的。
2. 持久化扩展
Elsa自带了很多持久性提供者,比如memory、EF Core、MongoDB、YesSQL和CosmosDB。虽然这些提供者应该满足最常见的需求,但他们肯定不限于这些。实现IWorkflowDefinitionStore为工作流定义提供自定义存储,并实现IWorkflowInstanceStore为工作流实例提供自定义存储。请注意,用户可以混合和匹配,这意味着您可以使用EntityFrameworkWorkflowDefinition存储进行工作流定义``` ` ` `,例如。
3. JavaScript函数
JavaScript表达式附带了一些您可能经常使用的有用的JavaScript函数。例如,它允许您从工作流中读取变量并引用活动输出值。但是,如果您发现自己需要其他功能,您可以很容易地从自己的应用程序中扩展该功能集。
4. 液体表达式
液体表达式还附带了一些可能经常使用的有用过滤器。例如,它允许您从工作流程中读取变量并引用活动输出值。但是,如果您发现自己需要其他功能,可以很容易地从您自己的应用程序中扩展过滤器集。
5. 表达式解析执行
也许Java脚本语言和液体还不够好,可以使用用C#,VBScript或计算机编程语言编写表达式。只需实现您自己的版本IExpressionEvaluator,即可在服务容器中注册它,即可在任何活动中使用自定义评估程序语法。
四、与Windows Workflow Foundation对比
目前,微软已经停止更新发展Windows操作系统工作流基础,同时技术社区也在努力做滤水器(Water Filter)到。净标准,但是埃尔莎有以下2点优势:
埃尔莎本质上支持触发事件,以一种易于使用的方式启动新的工作流并恢复暂停的工作流实例。例如工作流主机.trigger workflow async(“http请求触发器”);将启动和恢复由HttpRequestTrigger启动或暂停的所有工作流100 .埃尔莎有一个基于网络的工作流程设计器。我曾经为一个客户做过一个项目,这个客户正在构建一个巨大的软件服务平台。
需求之一是提供一个工作流引擎和一个基于网的编辑器。尽管有商业工作流库和编辑器,但商业模式需要开源软件。我们使用了滤水器(Water Filter)和重新托管的工作流设计器。它起作用了,但不是很好。
五、源代码编译构建
项目源代码地址:https://github。com/Elsa-workflow/Elsa-core
通过VS2019,使用克隆的方式,将代码克隆到本地编译构建。
项目使用了棱角分明,在调试运行前,本地需要完成新公共管理理论包安装和射流研究…编译,所以本地需要先安装开发
切换到XXsrcdashboardElsa .仪表板主题氩-仪表板,执行新公共管理理论安装
安装过程中,涉及到计算机编程语言相关的组件和环境变量配置,所以可能会安装失败,出现异常:
检查路径中的大蟒可执行文件“蟒蛇2号”找不到计算机编程语言可执行文件“python2.7”,可以设置PYTHON环境变量。
此时,先删除删除节点模块文件夹,然后执行:国家预防机制安装-全局windows-构建-工具
大蟒组件安装完成后,执行以下命令:
新公共管理配置集python C: Users zhougq windows-build-tools python 27 python。exe NPM安装
新公共管理理论安装成功后,在目录srcdashboardElsa .仪表板主题氩-仪表板下执行以下指令:
gulp build
此时埃尔莎仪表板前端项目全部编译通过。
接下来可以通过:
VS:艾尔莎。仪表板。网项目工程调式
也可以在艾尔莎。仪表板。网文件件下运行高级程序员运行。
浏览器中直接访问:http://localhost:port/elsa/home就可以使用了埃尔莎了。