.NET 5 开源工作流框架elsa技术研究

编者注: 工作流框架 elsa 是.NET基金会下面的开源项目,2.0版本即将在3月份发布,目前正在紧锣密鼓的开发之中,2020年2月份我也介绍过推荐一个很棒的开源工作流elsa-core ,今天给大家推荐MVP 周国庆写的这篇详细文章。

今天假期第一天,研究了.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

       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响应的计算通常使用流式表达式,或例如其中主体被标记使用液体发送电子邮件时。

    三、产品扩展能力

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,即可在服务容器中注册它,即可在任何活动中使用自定义评估程序语法。

  四、与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.

  五、源代码编译构建

        项目源代码地址: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了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 清空一个数组_PHP工程师学Python数据类型

一、背景继上篇文章比较了PHP与Python语法之后,这周又学习了Python数据类型,准备从通过这篇文章给自己进行一些总结,也给其他读者一些参考。二、内容概要字符串(str)列表(list)元组(tup)字典(dict)数据操作三、字符串(str)Python中字符串操作…

“开源、共享、创新” 2020 中国.NET开发者大会小结

大会的新闻稿在2020年12月31日正式发布:开源共享创新|2020年中国.NET开发者大会圆满收官! , 本文是这篇新闻的补充性文章,仅代表个人对大会的各方面分享内容的一个小结。在2019年上海中国.NET开发者大会的基础上,2020年12月19日 继…

maya的颤动怎么做_必看!新手学习MAYA的几个建议

“学习是没有捷径可言的,唯一的捷径就是不断的学习和练习,只有这样才能学到真功夫”Maya设计刚刚开始接触Maya的同学都会有这些疑问,我适不适合学习Maya,学习Maya可以赚到钱吗?怎样才可以学好Maya,今天给大…

我的2020年终总结:新的角色,新的开始

【年终总结】| 作者/Edison Zhou又到了一年一度的年终盘点时刻,熟悉我的朋友应该都知道,这个时候我都会写一篇推文盘点一下这一年来的得失。1也谈2020关键事件回顾(1)扯证了,结婚了要说2020年我个人的最大里程碑&#…

docker es持久化_使用docker数据卷对容器数据持久化

volume是用于对Docker容器生成和使用的数据持久化的首选机制。如果您的容器生成非持久状态数据,请考虑使用 tmpfs挂载以避免将数据永久存储在任何地方,并通过避免写入容器的可写层来提高容器的性能。默认容器的数据存储在这里我们在容器中创建一些模拟的…

求职信计算机工程师英语作文,开发工程师英文求职信范文

开发工程师英文求职信范文respected leaders:hello:first salute you sincere thanks, thank you for taking the time to consult the of my application letter!i am aptech a student, now already graduated from junior year. major in.net direction, and ismitted to be…

微信适配国产操作系统:原生支持 Linux

喜欢就关注我们吧!据 ZOL 报道,统信软件官方近日宣布上线适配统信 UOS 的微信桌面客户端,并称该微信版本为原生支持 Linux 的版本,同时支持龙芯、鲲鹏、麒麟等国产 CPU。据悉,统信 UOS 版的微信桌面客户端由腾讯公司研…

ML.NET生成器带来了许多错误修复和增强功能以及新功能

ML.NET是一个开源的跨平台机器学习框架,适合 .NET 开发人员。它允许将机器学习集成到 .NET 应用中,而无需离开 .NET 生态系统,甚至拥有 ML 或数据科学背景。ML.NET工具(Visual Studio 中的 UI 模型生成器和跨平台 ML.NET CLI&…

Flash 生命终止,HTML5能否完美替代?

Adobe 对 Flash Player 的支持计划在今天,也就是 2020 年 12 月 31 日终止。Windows 计算机上最新版本的 Flash Player 已经开始弹出生命周期终止提示窗口。提示中指出,为了保护用户系统,Adobe 将在 2021 年 1 月 12 日开始禁止 Flash 内容在…

typora公式zuo对齐_Markdown编辑神器-Typora

Markdown For Typora Overview Markdown is created by Daring Fireball, the original guideline is here. Its syntax, however, varies between different parsers or editors. Typora is using [GitHub Flavored Markdown][GFM]. 注:Markdown语法与知乎不能完全兼容,显示…

使用 ML.NET 识别乐高颜色块

每一个乐高迷都拥有很多的颜色块,需要进行排序和按类型分拣,按照《Organizing your LEGO Bricks》或许有所帮助,但这不是一个简单的任务,因为有很多颜色块有非常微妙的差异。如果换作一个典型的程序员可以做什么来解决这个问题呢&…

ccs加载out文件_类加载流程、类加载机制及自定义类加载器详解

原文:juejin.im/post/5cffa528e51d4556da53d091一、引言当程序使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、链接、初始化三个步骤对该类进行类加载。二、类的加载、链接、初始化1、加载类加载指的是将类的class文件读入内存&a…

unity中单位是米还是厘米_【一步数学】小学数学单位换算公式大全及专项训练...

重量单位换算1吨1000千克 1吨1000 000克吨:吨是重量单位,公制一吨等于1000公斤:计算船只容积的单位,一吨等于2.83立方米(合100立方英尺)。1千克1000克 500克1斤千克:克,(符号kg或㎏)…

二分法查找是基于有序_201,查找顺序查找

查找算法中顺序查找算是最简单的了,无论是有序的还是无序的都可以,也不需要排序,只需要一个个对比即可,但其实效率很低。我们来看下代码1public static int search1(int[] a, int key) {2 for (int i 0, length a.length; i …

河南大学计算机组成原理,河南大学计算机组成原理考点

河南大学计算机组成原理考点 (34页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!11.90 积分第1章 计算机系统概论1、计算机硬件的五大部件?三大部分?运算器 存储器…

zipsys驱动签名工具_全球首发 300系列主板USB WIN7 64位驱动 SMXDIY

本版为改版驱动,仅供SMXDIY会员学习测试,禁止传播。众所周知,H310/B360/H370/Z390是没USB的WIN7驱动的。网上也找不到相关的资料,大家普遍默认没驱动,但这已经成为历史。我们这发布的是真的驱动,可以整合到…

excel筛选排序从小到大_excel表格怎么按字数的多少来排列!

excel表格怎么按字数的多少来排列为了更好的做好我们的语料编定及翻译工作,尤其是个别语料数量较多,最多可达2000条。我们可以将字数少的,意图明确的,不会有异议的,我们可以根据每句话的字数,用excel来进行…

计算机系统的工作方式,某计算机系统输入/输出采用双缓冲工作方式,其工作过程如下图所示,假设磁盘块与缓冲 - 信管网...

第2题:实时操作系统(RTOS)内核与应用程序之间的接口称为( )。A.I/O接口B.PCIC.APID.GUI答案解析与讨论:www.cnitpm.com/st/2867029381.html第3题:嵌入式处理器是嵌入式系统的核心部…

怎么从转移特性曲线上看dibl_「科普向」这篇让你快速搞懂IGBT的静态特性

IGBT的静态特性其实并非难以理解的东西,即便是对于外行人而言。刚接触那会儿,看到转移特性、输出特性之类的就想溜之大吉,加之网上查询的资料一概笼统简单,只描述特性曲线所表示的关系结果,却并不解释曲线为何这里弯曲、那里平直&…

对CORS OPTIONS预检请求的一些思考

前后端分离模大势所趋,跨域问题更是老生常谈。《程序员应对浏览器同源策略的姿势》一文提到三种跨域请求方案,重点讲述了w3c和浏览器厂商推出的CORS规范。同源策略 所谓同源是指域名、协议、端口相同。不同源的浏览器脚本(javascript、ActionScript、ca…