一、主流开源框架介绍
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.1 | jBPM7.25 | Camunda | Snaker | Flowable6.3.1 |
---|---|---|---|---|---|---|
1 | 数据库持久层ORM | MyBatis3.4.2 | JPA2.2二次封装 | Mybatis | Mybatis | JPA 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/DataSource | Jdbc/DataSource | Jdbc/DataSource | Jdbc/DataSource | Jdbc/DataSource |
6 | 支持数据库 | Oracle、SQL Server、MySQL | Oracle、SQL Server、MySQL | Oracle、SQL Server、MySQL、db2 | mysql,oracle,db2, h2 ,mssql,postgres | Oracle、SQL Server、MySQL、db2 |
7 | 内部服务通讯 | Service间通过API调用 | 基于Apache Mina异步通讯 | Service间通过API调用 | Service间通过API调用 | Service间通过API调用 |
8 | 集成接口 | SOAP、Mule、RESTful | 消息通讯 | SOAP、Mule、RESTful | SOAP、Mule、RESTful | |
9 | 架构 | spring boot 2.1.2, spring 5.1.4 | Drools Flow | activiti5 | spring boot 1.5,spring 4.3, spring.security 4.2 | |
10 | 支持J2EE | 兼容 | 天然支持EJB,J2EE | 兼容 | 兼容 | |
11 | 技术前身 | jBPM3、jBPM4 | Drools Flow | activiti5 | activiti5 | |
12 | API文档 | swagger1.5 | swagger1.5 | |||
13 | 日志 | slf4j1.7门面,logback1.2.3 | slf4j1.5门面, log4j | slf4j1.7门面,logback1.2.3 | slf4j1.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/
2、mxGraph
mxGraph是一个强大的JavaScript流程图前端库,可以快速创建交互式图表和图表应用程序,国内外著名的ProcessOne和draw.io都是使用该库创建的强大的在线流程图绘制网站. 由于mxGraph是一个开放的js绘图开发框架,我们可以开发出很炫的样式,或者完全按照项目需求定制。官方网站:http://jgraph.github.io/mxgraph/
3、Activiti-Modeler
Activiti 开源版本中带了web版流程设计器,在Activiti-explorer项目中有Activiti-Modeler,优点是集成简单,开发工作量小,缺点是界面不美观,用户体验差。
4、flowable-modeler
flowable开源版本中带了web版流程设计器,展示风格和功能基本跟Activiti-Modeler一样,优点是集成简单,开发工作量小,缺点是界面不美观,用户体验差。
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.设计器比较:
设计器 | Activiti | Camunda | Snaker | Flowable |
---|---|---|---|---|
idea | actiBPM(不好用),Activiti BPMN visualizer | 集成camunda-modeler | - | |
Eclipes | Activiti Designer | snaker-designer | Flowable BPMN 2.0 designer | |
客户端 | - | Camunda Modeler | - | - |
网页版 | Activiti-Modeler、bpmn-js | bpmn-js | Snaker-web | flowable-modeler、bpmn-js |
2.数据库表比较
表 | Activiti | Camunda | Snaker | Flowable |
---|---|---|---|---|
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.因为内部源码简单,有些功能可以根据自己的业务场景重写代码,不太过于依赖里面场景