工作流引擎技术选型

news2024/12/23 17:55:08

一、主流开源框架介绍


1、工作流相关文档

1.Camunda

官方文档:https://camunda.com/

中文文档:介绍 | docs.camunda.org

2.Activiti

官方文档:https://www.activiti.org/

中文文档:[activiti6用户手册

3.Snaker

官方文档:http://snakerflow.com/

用户手册:Snaker 用户手册_深望的博客-CSDN博客_snaker

4.Flowable

官方文档:https://www.flowable.org/ Flowable6.3

中文文档:https://tkjohn.github.io/flowable-userguide/

2、工作流相关介绍

市场上比较有名的开源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。其中:Jbpm4、Activiti、Flowable、camunda四个框架同宗同源,祖先都是Jbpm4。

1.OsWorkFlow

对于比较简单的流程,OsWorkFlow会是一个比较好的选择,对于复杂的流程就不推荐了,OsWorkFlow是一个轻量化的流程引擎,基于状态机机制,数据库表很少,Osworkflow提供的工作流构成元素有:步骤(step)、条件(conditions)、循环(loops)、分支(spilts)、合并(joins)等,但不支持会签、跳转、退回、加签等这些操作,需要自己扩展开发,有一定难度。而且OsWorkFlow组件已过时,长时间没有版本升级了。

2.JBPM

JBPM由JBoss公司开发,目前最高版本JPBM7,不过从JBPM5开始已经跟之前不是同一个产品了,JBPM5的代码基础不是JBPM4,而是从Drools Flow重新开始,基于Drools Flow技术在国内市场上用的很少,所有不建议选择jBPM5以后版本,jBPM4诞生的比较早,后来JBPM4创建者Tom Baeyens离开JBoss后,加入Alfresco后很快推出了新的基于jBPM4的开源工作流系统Activiti,另外JBPM以hibernate作为数据持久化ORM也已不是主流技术,现在时间节点选择流程引擎,JBPM不是最佳选择。

在这里插入图片描述

3.Activiti

官网地址:https://www.activiti.org/

Activiti由Alfresco软件开发,目前最高版本Activiti7。Activiti的版本比较复杂,有Activiti5、Activiti6、Activiti7几个主流版本,选型时让人晕头转向,有必要先了解一下Activiti这几个版本的发展历史。Activiti5和Activiti6的核心leader是Tijs Rademakers,由于团队内部分歧,在2017年时Tijs Rademakers离开团队,创建了后来的Flowable,Activiti6以及Activiti5代码已经交接给了Salaboy团队,Activiti6以及Activiti5的代码官方已经暂停维护了,Salaboy团队目前在开发Activiti7框架,activiti7内核使用的还是Activiti6,并没有为引擎注入更多的新特性,只是在Activiti之外的上层封装了一些应用。结论是activiti谨慎选择。

优点:

​ 1、 最大的优点就是免费开源,这也是很多人选择的原因

​ 2、 小项目中应用简单的串行并行流转基本能满足需求。

缺点:

​ 1、缺少节点实例轨迹数据的持久化,Activity运行时紧紧围绕act_ru_execution这张表来工作,此表也是整个流程引擎的运行核心表,执行时是一个树型表,这张表就是节点运行实例的过程,而且使用PARENT_ID_来从一个节点到多个节点的过程,只是仅仅有一个Parent_Id_来维护是不够的,因为我们知道关系有可能这是样的正向生成的树,也有倒生长的树

​ 2、Activity需要经过大量的扩展才能应用起来,直接从官网下载下来的Activity要达到企业级应用还需要一段痛苦的改造之路要走。Activity的扩展非常依懒事件监听和AOP切面事件,,代码执行到处乱跳,非常的不好维护,可读性也差,一是维护人员的技术门槛非常高,二是越到后面代码越难维护。久而久之会把项目拖跨。

​ 3、Activity最明显的一个地方就是事件机制,简单来说把Activity执行过程理解为一条直线,这条执行直线上你要做很多的AOP拦截,对这个拦截进行事件抛出,然后自己再捕获这个事件进行扩展开发

4.Flowable

Flowable基于activiti6衍生出来的版本,flowable目前最新版本是v6.7.2,开发团队是从Activiti分裂出来的,
修复了一众Activiti6的bug,并在其基础上研发了DMN支持,BPEL支持等等,相对开源版,其商业版的功能会更强大。以flowable6.4.1版本为分水岭,大力发展其商业版产品,开源版本维护不及时,部分功能已经不再开源版发布,比如表单生成器(表单引擎)、历史数据同步至其他数据源、ES等。

Flowable是一个使用Java编写的轻量级业务流程引擎,使用Apache V2 license协议开源。2016年10月,
Activiti工作流引擎的主要开发者离开Alfresco公司并在Activiti分支基础上开启了Flowable开源项目。基于Activiti
v6 beta4 发布的第一个 Flowable release 版本为6.0。Flowable 项目中包括 BPMN (Business Process Model and Notation)引擎、CMMN (Case Management Model and Notation)引擎、DMN (Decision Model and Notation)引擎、表单引擎(Form Engine)等模块。

5.Camunda

官网地址:https://camunda.com/

中文文档地址:http://camunda-cn.shaochenfeng.com/introduction/

​ Camunda基于Activiti5,所以其保留了PVM,最新版本Camunda7.18,保持每年发布两个小版本的节奏,开源团队也是从activiti中分裂出来的,发展轨迹与flowable相似,同时也提供了商业版,不过对于一般企业应用,开源版也足够了,功能和性能表现稳定。

6.Snaker

snaker是一个基于Java的轻量级工作流引擎,适用于企业应用中常见的业务流程。本着轻量、简单、灵巧理念设计,定位于简单集成,多环境支持

优点:

1.只需要9张表,即可开始业务流程的驱动使用,主要针对中小型项目需要增加工作流特性的系统;相比于UFLO2、Activti十几张以上表,上手和使用的难度很低。(只需要根据实际的项目环境配置snaker.properties/snaker.xml两个文件即可)

2.核心代码少,源码只有7000多行,设计、编写非常规范,易懂、易改造。对于学习工作流原理或者二次开发,都很友好;

3.除了提供的常用功能API,支持拓展支持一些原生SQL语句的查询服务

4.业务流程实列简单,可以直接把业务数据存在流程实例的变量中(数据以JSON形式保存在流程实例和任务表中的variable 字段中,长度默认varchar(2000)),但这样也会增加流程引擎和业务数据的耦合;(建议还是在业务表中增加order_id、task_id 来支持业务流引擎的集成)

5.对外提供了可扩展的接口,支持流程设计器,节点自定义,属性自定义,表单自定义

6.剥离了权限角色相关依赖,实际导入系统时需要根据需求自己添加权限相关内容

缺点:

1.受限于轻量级限制,支持的业务场景不够丰富;

2.流程设计器不支持IDEA插件

3.稳定版为2.4版本,目前已停止更新维护

二、各大工作流技术对比

序号技术组成Activiti7.1jBPM7.25CamundaSnakerFlowable6.3.1
1数据库持久层ORMMyBatis3.4.2JPA2.2二次封装MybatisMybatisJPA 2.2
2持久化标准JPA规范JPA规范JPA规范JPA规范JPA规范
3事务管理MyBatis机制/Spring事务控制Bitronix,基于JTA事务管理hibernate机制/Spring事务控制由snaker自身管理/Spring事务控制hibernate机制,Spring事务控制
4分布式事务MyBatis机制/Spring事务控制Bitronix,基于JTA事务管理补偿机制,SAGA 模式
5数据库连接方式Jdbc/DataSourceJdbc/DataSourceJdbc/DataSourceJdbc/DataSourceJdbc/DataSource
6支持数据库Oracle、SQL Server、MySQLOracle、SQL Server、MySQLOracle、SQL Server、MySQL、db2mysql,oracle,db2, h2 ,mssql,postgresOracle、SQL Server、MySQL、db2
7内部服务通讯Service间通过API调用基于Apache Mina异步通讯Service间通过API调用Service间通过API调用Service间通过API调用
8集成接口SOAP、Mule、RESTful消息通讯SOAP、Mule、RESTfulSOAP、Mule、RESTful
9架构spring boot 2.1.2, spring 5.1.4Drools Flowactiviti5spring boot 1.5,spring 4.3, spring.security 4.2
10支持J2EE兼容天然支持EJB,J2EE兼容兼容
11技术前身jBPM3、jBPM4Drools Flowactiviti5activiti5
12API文档swagger1.5swagger1.5
13日志slf4j1.7门面,logback1.2.3slf4j1.5门面, log4jslf4j1.7门面,logback1.2.3slf4j1.7门面

三、流程设计器选型

​ 目前市场上比较主流的流程设计器有bpmn-js、mxGraph、Activiti-Modeler、flowable-modeler、easy-flow、bpmn2-modeler插件等。

1、bpmn-js

bpmn-js 是 BPMN 2.0 渲染工具包和 Web 模型。bpmn-js 正在努力成为 Camunda BPM 的一部分。bpmn-js 使用 Web 建模工具可以很方便的构建 BPMN 图表,可以把 BPMN 图表嵌入到你的项目中,容易扩展。bpmn-js是基于原生js开发,支持集成到vue、react等开源框架中。

官方网站:https://bpmn.io/

img

2、mxGraph

mxGraph是一个强大的JavaScript流程图前端库,可以快速创建交互式图表和图表应用程序,国内外著名的ProcessOne和draw.io都是使用该库创建的强大的在线流程图绘制网站. 由于mxGraph是一个开放的js绘图开发框架,我们可以开发出很炫的样式,或者完全按照项目需求定制。官方网站:http://jgraph.github.io/mxgraph/

img

3、Activiti-Modeler

Activiti 开源版本中带了web版流程设计器,在Activiti-explorer项目中有Activiti-Modeler,优点是集成简单,开发工作量小,缺点是界面不美观,用户体验差。

img

4、flowable-modeler

flowable开源版本中带了web版流程设计器,展示风格和功能基本跟Activiti-Modeler一样,优点是集成简单,开发工作量小,缺点是界面不美观,用户体验差。

img

5、easy-flow

码云上开源的流程设计器,没有深入研究,感觉离真正的BPMN流程图设计差距较大,不过至少有个框架。

https://gitee.com/xiaoka2017/easy-flow

6、Eclipse插件bpmn2-modeler

C/S版本的流程设计器,如果没有强调基于浏览器设计流程图,也可以考虑Eclipse插件版流程设计器bpmn2-modeler。官方地址:http://www.eclipse.org/bpmn2-model

7、https://snaker.mldong.com/

snaker工作流只用得画图软件,用起来简单,中文界面,可以直接翻译成xml文件和json类型,从而进行解析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vzZ6w3mz-1687750154701)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== “点击并拖拽以移动”)]​

四、相关优劣势

相关工作流涉及引擎使用得比较以及在开发时需要得设计器得相关介绍

在本优劣比较中也比较了对应当前市场所使用得版本介绍

1.设计器比较:

设计器ActivitiCamundaSnakerFlowable
ideaactiBPM(不好用),Activiti BPMN visualizer集成camunda-modeler-
EclipesActiviti Designersnaker-designerFlowable BPMN 2.0 designer
客户端-Camunda Modeler--
网页版Activiti-Modeler、bpmn-jsbpmn-jsSnaker-webflowable-modeler、bpmn-js

2.数据库表比较

ActivitiCamundaSnakerFlowable
ACT_GE_* : “GE”代表“General”(通用)ACT_HI_* : “HI”代表“History”(历史)ACT_ID_* : “ID”代表“Identity”(身份)ACT_RE_* : “RE”代表“Repository”(仓库)ACT_RU_* : “RU”代表“Runtime”(运行时)ACT_RE_: 'RE’表示流程资源存储ACT_RU_: 'RU’表示流程运行时ACT_ID_: 'ID’表示组织用户信息ACT_HI_: 'HI’表示流程历史记录ACT_GE_*: ‘GE’表示流程通用数据wf_cc_order  抄送实例表、wf_hist_order  历史流程实例表wf_hist_task  历史任务表wf_hist_task_actor  历史任务参与者表wf_order  流程实例表、wf_process  流程定义表、wf_surrogate  委托代理表、wf_task  任务表、wf_task_actor  任务参与者表ACT_RE_* : ’RE’表示repository(存储)ACT_RU_* : ’RU’表示runtimeACT_ID_* : ’ID’表示identity(组织机构)ACT_HI_* : ’HI’表示history。ACT_GE_* : 普通数据,各种情况都使用的数据
23张(不同版本数量不一致)47张(不同版本数量不一致)9张(不同版本数量不一致)80张(不同版本数量不一致)
版本支持7.0.0(25张)7.15.0(19张)2.5.0(9张)6.7.2(47张)

3.相关版本介绍

Activiti7

  • 由Salaboy团队基于由Activiti6核心迭代的新版本,但是没有给引擎注入更多的新特性,只是在Activiti6之外的上层封装了一些应用。
  • 从2017开始截至到2022年5月,Activiti7迭代到的最新版本为:7.3.0
  • activiti6以及activiti5的代码官方已经宣称暂停维护了
  • BUG比较多

Flowable

  • 从2017开始截至到2022年5月,Flowable迭代到的最新版本为:6.7.2

  • 由Tijs Rademakers团队开发维护,是基于Activiti6初始版本迭代带。Flowable 6.4.1 以上版本修复了大量Activiti6版本BUG

  • flowable以6.4.1版本为分水岭,大力发展其商业版产品。开源版本维护不是很及时,并且部分功能已经不再开源版发布,比如表单生成器(表单引擎)、历史数据同步至其他数据源、es等等

Camunda

  • 2012年基于Activiti5.x分裂出来的一个新的开源流程引擎,称为:Camunda BPM

  • 从2012开始截至到2022年5月,迭代到的最新版本为:7.18.0-alpha1,最新稳定版本为:7.17.0

  • 2022年4月,Camunda云原生工作流引擎Camunda Cloud升级为:Camunda Platform 8

Snaker

  • 稳定版为2.4版本,支持的hibernate最高直到4版本,目前已停止更新维护
  • 目前所依赖在springboot中得版本是1.0.8

五、功能总结

Activiti7

1.功能强大,满足各种复杂的业务场景流程需求

2.表结构复杂,继承了用户权限表,需要完成用户同步

3.核心代码量大,逻辑较为复杂,二次开发难度较大

4.Activity的扩展非常依懒事件监听和AOP切面事件,,代码执行到处乱跳,非常的不好维护,可读性也差,一是维护人员的技术门槛非常高,二是越到后面代码越难维护

5.是一款比较重量级的流程引擎

Flowable

1.Flowable更注重其功能性、扩展性和性能

2.以flowable6.4.1版本为分水岭,大力发展其商业版产品,开源版本维护不及时,部分功能已经不再开源版发布

3.Flowable6.5版本是商业版本与开源版本的区割点,后续版本开源版本可能不在提供技术支持

4.Flowable比较臃肿,它支持了太多的东西

Camunda

1.Camunda是这3个里面比较轻量的一个,但是它并没有去掉PVM(流程虚拟机)这个性能较差的流程推动引擎,所以如果你对性能要求很高的话,PVM肯定是不能满足的(Activiti已经在6.X版本的时候放弃了PVM,Flowable亦是如此)

2.Camunda的内部运行的性能也比较好

3.功能比较完善,除了BPMN,Camunda还支持企业和社区版本中的CMMN(案例管理)和DMN(决策自动化)。Camunda不仅带有引擎,还带有非常强大的工具,用于建模,任务管理,操作监控和用户管理,所有这些都是开源的

Snaker

1.Snaker是基于java的轻量级工作流引擎,接口丰富,使用简单

2.剥离了权限角色相关依赖,实际导入系统时需要根据需求自己添加权限相关内容

3.受限于轻量级限制,支持的业务场景不够丰富;

2.Camunda的内部运行的性能也比较好

3.功能比较完善,除了BPMN,Camunda还支持企业和社区版本中的CMMN(案例管理)和DMN(决策自动化)。Camunda不仅带有引擎,还带有非常强大的工具,用于建模,任务管理,操作监控和用户管理,所有这些都是开源的

Snaker

1.Snaker是基于java的轻量级工作流引擎,接口丰富,使用简单

2.剥离了权限角色相关依赖,实际导入系统时需要根据需求自己添加权限相关内容

3.受限于轻量级限制,支持的业务场景不够丰富;

4.因为内部源码简单,有些功能可以根据自己的业务场景重写代码,不太过于依赖里面场景

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

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

相关文章

【PCIE体系结构十四】电气物理层之发送端FFE

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考书籍:《PCI.EXPRESS系统体系结构标准教材 Mindshare》 参考文章&…

Docker 安装 Nginx,并实现负载均衡

1、获取 nginx 的镜像 # 默认是latest版本docker pull nginx 2、运行 nginx 容器 docker run --name nginx-80 -p 80:80 --rm -d nginx# --name nginx-80 设定容器的名称# -p 80:80 端口进行映射,将本地的80端口映射到容器内部的80端口# --rm 表示容器退出后直接…

云安全技术——Hyper-V虚拟化技术

目录 5-1 了解Hyper-V 5-2 安装Hyper-V 5-3创建虚拟机 Hyper-V虚拟化技术 实验目的 了解 Windows 虚拟化的概念 了解 Hyper-V的背景及发展 了解 Hyper-V 的功能特性 了解 Hyper-V的体系架构 实验要求 能描述 Hyper-V 的功能特性 能在 Windows 2012 R2系统下部署 Hyper-V 能使…

SpringBoot整合MyBatis分页

SpringBoot整合MyBatis分页 一、pagehelper分页1、添加相关依赖2、添加相关配置3、添加分页配置4、添加代码5、测试 二、拦截器分页1、添加相关配置2、添加拦截器代码和配置3、添加代码4、测试4、测试 本文目标: SpringBoot整合Mybatis分页的两种方式,一…

Python基础八

目录 一、Python条件控制语句 1.执行过程 2.if 语句 if中常用的操作运算符: if 嵌套 3.match...case语句 二、Python循环控制语句 1.while循环 while无限循环 while 循环使用 else 语句 2.for 循环语句 for...in...循环 for循环使用else语句 for...in range()…

2023年3季度DAMA-CDGA/CDGP数据治理认证即将开班

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

你知道ai绘画生成器怎么弄吗

在数字时代,艺术也开始走向了自动化。随着人工智能技术的进步,ai绘画软件已经开始逐渐普及。它们可以利用先进的神经网络算法,学习人类艺术家的风格和技巧,从而生成出高度逼真的艺术作品。这些作品虽然没有人类艺术家的创意和灵魂…

Linux系统编程(终端和进程的关系)

文章目录 前言一、终端和控制台二、TTY和PTY三、终端的类型四、Gnome Terminal伪终端总结 前言 本篇文章带大家学习终端和进程的关系,终端相信大家都听过,那么真的理解终端是什么吗?应该有很多同学对于终端只是有一个模糊的概念。那么这篇文…

【算法题】合并两个有序链表、删除字符串 s1 中在字符串 s2 中出现的字符、求一个论坛一天的在线人数分布

合并两个有序链表、删除字符串 s1 中在字符串 s2 中出现的字符、求一个论坛一天的在线人数分布 一、合并两个有序链表1.1、题目描述1.2、思路1.3、代码实现1.4、小结 二、删除字符串 s1 中在字符串 s2 中出现的字符2.1、题目描述2.2、思路2.3、代码实现2.4、小结 三、求一个论坛…

项目进度类知识要点

单代号网络图 六标时法正推法逆推法 六标时法最早开始时间(ES)工期最早完成时间(EF)活动名称/活动编号最迟开始时间(LS)浮动时间(总时差)最迟完成时间(LF) 关键路径、计算项目的总工期 关键路径是最大长度关键路径上的活动是关键活动关键活动之和为总工期 关键路径变化问题…

华为18级工程师三年心血终成趣谈网络协议文档(附大牛讲解)

前言 虽然在大学的时候大家都学过网络协议 ,但是肯定感觉网络协议的知识点非常多 ,非常复杂。学的时候就浑浑噩噩,真正到了实践中更是糊里糊涂,一旦工作中遇到了网络问题,除了会简单地 ping 几下 ,基本没有…

安装Jmeter

Jmeter是Java语言开发,所以需要java环境,所以先安装jdk 1.安装JDK(1.8版本以上) 下载: https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 找到对应的版本: 点击exe文件安装,跟着向导下一步 2.安装jmeter 下载 Jmeter : 版…

【Java】JVM(六)

垃圾回收 分代回收理论 当前商业虚拟机的垃圾回收器,大多遵循“分代收集”的理论来进行设计,这个理论大体上是这么描述的: 1、绝大部分的对象都是朝生夕死。 2、熬过多次垃圾回收的对象就越难回收。 根据以上两个理论,朝生夕…

【Java】JVM学习(四)

对象的分配 JVM中对象的创建过程 对象的内存分配 虚拟机遇到一条new指令时,首先检查是否被类加载器加载,如果没有,那必须先执行相应的类加载过程。 类加载就是把class加载到JVM的运行时数据区的过程。 1)检查加载 首先检查这…

从选题、创作、编辑、推广到优化,23个必用的内容营销工具

咱们做内容营销的,要懂营销懂产品,看得懂技术语言,写得了行业洞察,做出来的内容要有创意还要接地气,专业内容也不能落下,除了会写,还要会运营会设计会剪视频,简直就是全才嘛。 但是…

你知道游戏配音怎么制作吗?教你游戏配音教程怎么做

曾经,有一个叫小明的游戏迷,他对于游戏世界充满了热爱和想象。每当他控制着自己喜爱的角色在游戏中冒险时,他总是希望能够为这些角色赋予独特的声音,让它们真正活起来。然而,他却面临一个问题:游戏配音教程…

【CTF-Reverse中的加密算法】密码算法特征识别,变种密码算法分析

上一章中我们带领大家了解了加密算法——RC4,TEA,Base64算法的原理,但是加密算法远不止这些,需要大家自行去学习,在这一章中,我来带领大家了解密码算法特征识别,变种密码算法分析。 一.密码算法特征识别 1.什么是特征…

详解MySQL的常用数据类型

文章目录 一、MySQL 数据类型1.1、mysql中编码和字符 二、数值类型2.1、整数类型的长度2.2、浮点型 三、字符串类型3.1、字符串类型长度 四、日期和时间类型4.1、DATETIME 五、二进制数据类型六、使用建议 一、MySQL 数据类型 MySQL支持很多数据类型,以便我们能在复…

实现定时任务

1 问题 定时任务中,每天统计一下今日博客的各项数据,并以邮件的形式发送给自己。 2 方法 .首先在某目录下新建任务文件 crontest.cron,用于存在定时任务语句。.相同目录新建 hello.py 文件,并且编辑这个文件写一句简单的 print(He…

【JUC进阶】05. 偏向锁

目录 1、前言 2、偏向锁 2.1、基本原理 2.2、使用场景 3、获取偏向锁 4、何时撤销 4.1、到达安全点 4.2、其他线程尝试竞争偏向锁 4.3、重新计算hashcode 5、小结 1、前言 偏向锁是Java并发编程中一种重要的锁机制,它针对特定的线程进行优化,…