Elsa工作流简介

工作流是什么?

引用维基百科中对工作流的解释:

是对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算

Elsa 是一个功能强大的工作流库,支持在任何 .NET 应用程序中执行工作流。Elsa 可以使用C#代码或使用基于Web的可视化设计器生成JSON等方式定义工作流程。

Elsa 可用于多种场景,包括:

  • 长时间运行的工作流程,例如订单履行和产品批准。
  • 运行时间较短的工作流程,例如发送电子邮件和生成 PDF。
  • 计划的工作流,例如发送每日报告。
  • 事件驱动的工作流,例如在用户注册时发送欢迎电子邮件。

Elsa免费且开源,并且有较完善的文档,了解更多请访问官网官方仓库

工作流的基本概念

要定义一个工作流,需要包含两个最基本的信息:

  1. 对一系列任务的执行过程的描述;
  2. 各任务之间执行关系的描述。

在Elsa中,这些被抽象为:

  1. 活动(Activity): 执行任务的实体,如:写入文本、发送邮件、执行SQL、执行HTTP请求等;
  2. 工作流(Workflow):包含多个活动,以及活动之间的执行关系, 如:并行、串行、分支、循环等;

有了活动和工作流,就可以描述一个任务的执行过程了。但为了满足业务的复杂性,Elsa还引入了更多的功能和概念。

上下文系统

活动的本质是执行任务,任务的执行需要数据支持,或返回结果。下游的任务也可能依赖于上游任务的返回结果,如:一个发送执行结果邮件任务,需要知道接收信息和前一个任务的执行结果。上下文系统就是用来支持任务执行过程中的数据传递的。

上下文系统包括:

  • 变量(Variable)
  • 工作流输入/输出(Input/Output)
  • 活动输入/输出
  • 结果(OutCome)

阻断/恢复功能

一些场景下,任务不会连续执行,需要暂停任务,任务恢复后,需要继续执行。

这些场景包括:

  • 延时触发,或按计时器规则触发的任务;
  • 接收到某个消息才执行的任务。

这些功能在Elsa中使用书签(Bookmark)事件(Event)等类型实现。

设计器(Designer)

硬编码的方式已经无法满足复杂的业务场景,设计器可以将工作流设计为一个图形化的界面,用户可以拖拽活动,连线,设置活动的属性;活动被打包成一个节点(Node),与活动之间的连线表示活动之间的依赖关系。

定义(Definition)与实例化(Instance)

工作流定义描述了一个工作流的结构,比如:名称,变量,包含的活动等,可以理解为一个工作流的模板。

工作流定义在Elsa初始化时会“注册” 到资源池中,每个工作流定义都有一个唯一的ID。

使用设计器生成的工作流,通过序列化成JSON字符串,并持久化到数据库。

使用硬编码创建的工作流,在Elsa初始化时将工作流注册到工作流定义并持久化到数据库。

实例化是根据定义创建一个工作流的实例,工作流实例包含工作流状态(WorkflowState)以及活动实例(ActivityState)。与定义一样,它们通过序列化成JSON字符串,并持久化到数据库。当程序重新启动时,会从数据库中恢复工作流实例。

[.NET项目实战] Elsa开源工作流组件应用(一): Elsa工作流简介的更多相关文章

  1. react 项目实战(四)组件化表单/表单控件 高阶组件

    高阶组件:formProvider 高阶组件就是返回组件的组件(函数) 为什么要通过一个组件去返回另一个组件? 使用高阶组件可以在不修改原组件代码的情况下,修改原组件的行为或增强功能. 我们现在已经有 ...

  2. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-5.开源工具的优缺点选择和抽象方法的建议

    笔记 5.开源工具的优缺点选择和抽象方法的建议     简介:讲解开源工具的好处和弊端,如pageHeper分页拦截器,tk自动生成工具,抽象方法的利弊等 1.开源工具             好处: ...

  3. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_汇总

    2018年Spring Boot 2.x整合微信支付在线教育网站高级项目实战视频课程 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-1.SpringBoot整合微信支付开发在 ...

  4. ②SpringCloud 实战:引入Feign组件,完善服务间调用

    这是SpringCloud实战系列中第二篇文章,了解前面第一篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 简介 Feign 是一个声明式的 RE ...

  5. ⑥SpringCloud 实战:引入gateway组件,开启网关路由功能

    这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

  6. .NET Core/.NET5/.NET6 开源项目汇总3:工作流组件

    系列目录     [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...

  7. Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  8. 开源的.Net 工作流引擎Elsa初试——创建工作流服务器和图形化工作流配置管理应用

    微软的Workflow Foundation基于.Net Framework,并且没有向.Net Core迁移的计划.我们的很多项目使用了工作流引擎,这些项目向.Net Core以及更高版本迁移时遇到 ...

  9. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  10. 基于开源SuperSocket实现客户端和服务端通信项目实战

    一.课程介绍 本期带给大家分享的是基于SuperSocket的项目实战,阿笨在实际工作中遇到的真实业务场景,请跟随阿笨的视角去如何实现打通B/S与C/S网络通讯,如果您对本期的<基于开源Supe ...

随机推荐

  1. PHP的无限极分类

    PHP的无限极分类 一.使用数据表 添加from字段 id name parent_id from 1 中国 0 0 2 广东 1 0,1 3 深圳 2 0,1,2 4 龙华 3 0,1,2,3 5 ...

  2. Vulkan学习苦旅03:零号显卡,启动!(选择物理设备VkPhysicalDevcie)

    随着近几年AI的迅速发展,GPU变得越来越抢手.然而,GPU的全称为Graphics Processing Unit, 从名字中就可以看出,GPU是为了处理图形而诞生的,后来才被应用到科学计算等领域中 ...

  3. OSW Analyzer分析oswbb日志发生异常

    具体OSW Analyzer详细介绍可以参考MOS文档: OSWatcher Analyzer User Guide (Doc ID 461053.1) 我们常用的就是拿到一份osw数据到自己电脑,使 ...

  4. 听说有 Hugging Face 陪伴的春节,是这样的…

    辞旧迎新春节到,家家户户好热闹.Hugging Face 中国团队成员祝各位社区成员们新春快乐,万事如意! 过去的一年我们持续看到 AI 技术的腾飞和发展,以及诸多机构为开源 AI 作出巨大的贡献.非 ...

  5. Python实现希尔排序、快速排序、归并排序

    快速排序 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所 ...

  6. JS Leetcode 263. 丑数 题解分析,来认识有趣的丑数吧

    壹 ❀ 引 本题来自LeetCode263. 丑数,难度简单,题目描述如下: 给你一个整数 n ,请你判断 n 是否为 丑数 .如果是,返回 true :否则,返回 false . 丑数 就是只包含质 ...

  7. NC20277 [SCOI2010]字符串

    题目链接 题目 题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhg ...

  8. 2024 SICTF Round#3出题 crypto misc osint

    有幸参与了本次比赛crypto misc OSINT出题,难易程度循序渐进,下面记录一下本人题目题解(( 比赛网址:https://yuanshen.life/ CRYPTO SuperbRSA(85 ...

  9. 【Unity3D】UGUI之Toggle

    1 Toggle属性面板 ​ 在 Hierarchy 窗口右键,选择 UI 列表里的 Toggle 控件,即可创建 Toggle 控件,选中创建的 Toggle 控件,按键盘[T]键,可以调整 Tog ...

  10. Swoole从入门到入土(1)——入坑

    入坑一个话题,总得有入坑的理由.有好多话题可供选择,但是思来想去,对于PHPer进阶与其急着去掌握一门新的语言,匆忙地踏足一个新的知识体系,还不如先把php圈子的技能点攒齐了. 话说Swoole诞生之 ...