工作流引擎的架构设计与对比

所谓工作流引擎是指 workflow 作为应用系统的一部分,并为之提供对各应用系统有决定作用的,根据角色、分工和条件的不同决定信息传递路由、内容等级 等核心解决方案。工作流引擎可以灵活地配置工作流程,并且可以自动化的根据配置进行状态变更和流程流转,包括流程的节点管理、流向管理、流程样例管理等重要功能。下面,介绍一个比较简单的工作流程,来演示一下工作流引擎到底是一个什么样的东西。

最简单流程

最简单的一个流程工单,申请人发起流程,每个节点审批人逐个审批,最终流程结束。

会签

在这个过程中,节点分成了两大类:简单节点和复杂节点。

简单节点处理逻辑不变,依然是处理完之后自动到下一个节点。

复杂节点比如说会签节点,则不同,需要其下的所有子节点都处理完成,才能到下一个节点。

并行

同样属于复杂节点,其任何一个子节点处理完成后,都可以进入到下一个节点。

条件判断

需要根据不同的表单内容进入不同的分支流程。

举一个例子,比如在进行休假申请时,请假一天需要直属领导审批,如果大于三天则需要部门领导审批。

动态审批人

审批节点的审批人需要动态获取,并且可配置。

审批人的获取方式可以分以下几种:

  1. 固定审批人

  2. 从申请表单中获取

  3. 根据组织架构,动态获取

  4. 从配置的角色组或者权限组中获取

撤销和驳回

节点状态变更可以有申请人撤回,审批人同意,审批人驳回等。那么在驳回时,可以直接驳回到开始节点,流程结束,也可以驳回到上一个节点。更复杂一些,甚至可以驳回到前面流程的任意一个节点。

以上便是简单工作流中的一些比较常见的需求点,还有像加签,代理,脚本执行等功能,如果都实现的话,应该会是一个庞大的工作量。这时,我们就需要用到一个开源的工作流引擎,来实现这些常用但开发起来却比较繁琐的流程功能。

目前,市场上比较有名的开源流程引擎有 Osworkflow、Jbpm、Activiti、Flowable、Camunda 等。其中:Jbpm、Activiti、Flowable、Camunda 四个框架同宗同源,祖先都是 Jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个了。下面,我们就来了解下这些工作流引擎的一些特性和异同点。

工作流引擎对比

Osworkflow

Osworkflow 是一个轻量化的流程引擎,基于状态机机制,数据库表很少。Osworkflow 提供的工作流构成元素有:步骤(step)、条件(conditions)、循环(loops)、分支(spilts)、合并(joins)等,但不支持会签、跳转、退回、加签等这些操作,需要自己扩展开发,有一定难度。如果流程比较简单,Osworkflow 是一个很不错的选择。

Activiti

Activiti 由 Alfresco 软件开发,Activiti 的版本比较复杂,有 Activiti5、Activiti6、Activiti7 几个主流版本。Activiti5 和 Activiti6 的核心 leader 是 Tijs Rademakers,由于团队内部分歧,在 2017 年 Tijs Rademakers 离开团队,创建了后来的 Flowable。Activiti6 以及 Activiti5 代码已经交接给了 Salaboy 团队,Activiti6 以及 Activiti5 的代码官方已经暂停维护了。

Salaboy 团队目前在开发 Activiti7 框架,Activiti7 内核使用的还是 Activiti6,并没有为引擎注入更多的新特性,只是在 Activiti 之外的上层封装了一些应用。

Flowable

Flowable 是一个使用 Java 编写的轻量级业务流程引擎,使用 Apache V2 license 协议开源。2016 年 10 月,Activiti 工作流引擎的主要开发者离开 Alfresco 公司并在 Activiti 分支基础上开启了 Flowable 开源项目。基于 Activiti v6 beta4 发布的第一个 Flowable release 版本为 6.0。

Flowable 项目中包括 BPMN引擎、CMMN引擎、DMN引擎、表单引擎等模块。相对开源版,其商业版的功能会更强大。以 Flowable6.4.1 版本为分水岭,大力发展其商业版产品,开源版本维护不及时,部分功能已经不再开源版发布,比如表单生成器、历史数据同步至其他数据源、ES 等。

Camunda

Camunda 基于 Activiti5,所以其保留了 PVM,开发团队也是从 Activiti 中分裂出来的,发展轨迹与 Flowable 相似,同时也提供了商业版,不过对于一般企业应用,开源版本也足够了。

以上便是工作流引擎的一个大致设计思路,运用一些开源的工作流引擎,可以让我们的开发设计达到事半功倍的效果,更多详情了解可以看工作流引擎设计与应用icon-default.png?t=N7T8https://www.jnpfsoft.com/?csdnjie

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

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

相关文章

WebRPC开发基础流程

一、WebRTC 使用入门 WebRTC(全称 Web Real-Time Communication),即网页即时通信。 是一个支持网页浏览器进行实时语音对话或视频对话的技术方案。从前端技术开发的视角来看,是一组可调用的API标准。 WebRTC API 官网&#xff1…

Observability:捕获 Elastic Agent 和 Elasticsearch 之间的延迟

在现代 IT 基础设施的动态环境中,高效的数据收集和分析至关重要。 Elastic Agent 是 Elastic Stack 的关键组件,通过促进将数据无缝摄取到 Elasticsearch 中,在此过程中发挥着至关重要的作用。 然而,显着影响此过程整体有效性的关…

金融CRM有用吗?金融行业CRM有哪些功能

市场形式波诡云谲,金融行业也面临着资源体系分散、竞争力后继不足、未知风险无法规避等问题。金融企业该如何解决这些问题,或许可以了解一下CRM管理系统,和其提供的金融行业CRM解决方案。 金融行业是银行业、保险业、信托业、证券业和租赁业…

Windows 终端与 PowerShell:它们有何不同?

如果您使用的是 Windows 11 或 Windows 10,你会发现预安装了 PowerShell 和 Windows 终端。两者都是命令行界面,允许您输入文本命令来执行各种任务,但它们有何不同? PowerShell 是对命令提示符的改进 Windows 11 中的 Windows Po…

基于SSM的双减后初小教育课外学习生活活动平台的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

odoo17核心1——概述

odoo17发布了,如果说odoo16是一个承前启后的版本,那么odoo17则完全抛弃了历史包袱,全面简化了前端代码,是一个里程碑式的版本。 在学习odoo的过程中,结合对源码的阅读,对odoo的设计哲学有了一些自己的感悟…

分享一些实用工具和学习网站

1 前言 虽然已经工作过几年的时间了,但是学习的脚步是不能停止的,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。…

BSWM 模式管理(二)ESH

BSWM 模式管理 ESH 1 ECU State Handling (ESH)2 BSWM ESH 五大模式与六大通用状态机3 状态机对应的切换条件 conditions or rules4 默认主要的 ACTION 或者 ACTION LIST1 ECU State Handling (ESH) 与 ECUM 相关,整个 ECU 状态管理的状态机制 2 BSWM ESH 五大模式与六大通…

时间序列预测模型全家桶-最全教程

时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博客 风速预测(三)EMD-LSTM-Attention模型-CSDN博客 风速预测(四)基于P…

Spring Boot学习随笔- 文件上传和下载(在线打卡、附件下载、MultipartFile)

学习视频:【编程不良人】2021年SpringBoot最新最全教程 第十二章、文件上传、下载 文件上传 文件上传是指将文件从客户端计算机传输到服务器的过程。 上传思路 前端的上传页面:提交方式必须为post,enctype属性必须为multipart/form-data开发…

Maven将Jar包打入本地仓库

Maven将Jar包打入本地仓库 Maven将Jar包打入本地仓库嘚吧嘚下载Maven配置Maven新建MAVEN_HOME编辑Path验证Maven配置 Jar包打入Maven仓库 Maven将Jar包打入本地仓库 嘚吧嘚 最近项目用到一个Jar包,不能从远程仓库拉取,只有一个Jar包,所以需…

IDEA Community html文件里的script标签没有syntax highlighting的解决方案

在网上找到的解决方法有的是针对Ultimate版本才可以下载的plugin,对我所用的Community版本无法生效,找了一圈最后在stackoverflow上找到一个有效的方案,给需要的小伙伴分享一下:IntelliJ Community Edition: Javascript syntax hi…

还在用nvm?来试试更快的node版本管理工具——fnm

前言 📫 大家好,我是南木元元,热衷分享有趣实用的文章,希望大家多多支持,一起进步! 🍅 个人主页:南木元元 目录 什么是node版本管理 常见的node版本管理工具 fnm是什么 安装fnm …

优维科技荣获第二届中国赛宝信息技术应用创新优秀解决方案三等奖

近日,“第二届中国赛宝信息技术应用创新优秀解决方案”评选活动圆满结束。优维科技所提交的《Hyperlnsight超融合持续观测解决方案》、《EasyOps一体化运维平台》从全国近300份申报方案中脱颖而出,荣获2023中国赛宝信息技术应用创新优秀解决方案奖。 本…

持续集成交付CICD:HELM 自动化完成前端项目应用发布与回滚

目录 一、实验 1.环境 2. GitLab 共享库新建HELM CI流水线 3.Jenkins新建HELM CI流水线 5.Jenkins构建前端项目 6.GitLab 共享库新建HELM CD流水线 7.Jenkins新建HELM CD流水线 8.HELM完成前端项目应用发布与回滚 9.Jenkins再次构建前端项目 10.HELM再次完成前端项目…

Leetcode—179.最大数【中等】

2023每日刷题&#xff08;六十五&#xff09; Leetcode—179.最大数 算法思想 实现代码 其中sort的lambda自定义排序策略参考自官方文档 class Solution { public:string largestNumber(vector<int>& nums) {string ans;vector<string> strs;for(auto num: …

【离散数学】——期末刷题题库(图论应用题)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

10 Vue3中v-html指令的用法

概述 v-html主要是用来渲染富文本内容&#xff0c;比如评论信息&#xff0c;新闻信息&#xff0c;文章信息等。 v-html是一个特别不安全的指令&#xff0c;因为它会将文本以HTML的显示进行渲染&#xff0c;一旦文本里面包含一些恶意的js代码&#xff0c;可能会导致整个网页发…

Leetcode 1005 K 次取反后最大化的数组和

题意理解&#xff1a; 有k次对元素取反的次数&#xff0c;要求k次取反&#xff0c;消耗完&#xff0c;且使最后的数组和最大。 解题思路&#xff1a; 采用贪心的思路来解题。则需要定义局部最优解和全局最优解。 全局最优解&#xff1a;最终的数组和最大 则我们需要保证绝对值大…

如何设计树形结构

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 前置知识&#xff1a;前…