目前主流的开源工作流框架有Activiti、Flowable,它们都源自于Jbpm。先是有了Jbpm4,随后出来了一个Activiti5,Activiti5经过一段时间的发展,核心人员用Activiti5发展了4年左右,后面就发布了Flowable。
Activiti
Activiti 是一个针对开发人员的轻量级工作流引擎平台。 它的核心是一个基于BPMN 2 流程引擎,开源免费,并在 Apache 许可下分发。 Activiti 可以在任何 Java 应用程序、服务器、集群或云中运行。 它与 Spring 完美集成,非常轻量级,基于简单的概念。
不过Activiti7在目前来说迭代比较慢了,核心功能和内核的优化并没有太大进步,主要发在是在商业版和云上面,核心只支持BPMN2协议,跟Activiti76版本区别不大。
Flowable
Flowable 是一个基于Java的开源工作流引擎,用于设计、部署和执行可扩展的工作流和业务流程。它提供了一系列API和工具,可以轻松地将业务过程转化为自动化工作流,实现各种复杂的业务场景,如审批流程、订单处理、报销等。
Flowable 支持BPMN 2.0标准,可以通过图形化界面进行流程设模型设定,并且支持动态修改流程实例。它还提供了REST API,使得应用程序可以轻松地与Flowable进行集成。
Flowable不管是功能层面比Activiti更强,在代码层面也更多,当初跟Activiti分道扬镳的原因也是因为理念不一样,Flowable更注重其功能性、扩展性和性能。历史异步归档和异步任务全局锁都是对性能的极大优化,特别是异步任务这一项,当年在使用Activiti的使用是一个极大的困扰,因为异步任务的吞吐反而会随着实例数的增加而加速恶化。Flowable比较臃肿,它支持了太多的东西,以致于如果想做POC或者Demo,部署起来会比较耗费精力。
对比
对比之下Activiti比Flowable更轻量级,若是项目比较小。可以考虑用Activiti,若是对功能和性能要求更多可以考虑Flowable。
不过这2个产品因为是国外的开源产品,不能拿来就用,对国内用户来说只能经过大量的开发改造才能适应国内的应用场景,并且有些场景即使经过改造也没法实现,还有就是对流程历史数据支持不是很好。
更优选择
若是想拿来即用,对工作流引擎功能要求高,并且对中国特色流程也有要求的话,可以考虑下F2BPM工作流引擎。
F2BPM工作流引擎
F2BPM工作流引擎(以下简称F2BPM)是纯国产自主研发的工作流引擎,包含流程引擎和可视化拖拽式流程设计器。
F2BPM历经10年的BPM工作流技术大型项目实战经验和积累而研发,F2BPM遵循参考WFCM、BPMN2.0标准规范,微服务前后端分离架构,符合中国国情特色,致力于轻量级的工作流引擎,纯国产工作流引擎,支持国产数据库、应用服务器和操作系统。
F2BPM是一套提供给集成商、软件开发商或需要用于工作流功能系统软件研发者,可快捷灵活的嵌入到目标应用系统当中,可与第三方开发框架无缝集成。 强大智能的组织模型接口智能识别接入方系统组织架构,可快速应用到任何基于管理系统,实现工作流审批、业务流(BPM)的智能性、灵活性、简单实用性,优秀的扩展性、集成性、独立性、开放性和稳定性。
F2BPM支持可视化的流程设计器来设计流程的定义,Web端纯JS流程设计器无需编程,完全是通过鼠标拖、拉、拽的方式来完成,支持串行、并行、分支、异或分支、M取N路分支、会签、聚合、多重聚合、退回、传阅、转交,都可以非常方便快捷地实现,管理员还可以随时根据企业的情况调整流程,通过流程监控实时分析流程实例的运行数据分析,提供企业流程的不断优化的依据,同时智能流程版本管理功能,当流程变化转大时旧的实例按旧的流程定义运转,新启动的流程按新版本的流程运转,新旧隔离互不影响。
F2BPM产品特点:
1、 强大的Web流程设计器,快速通过“拖、拉、拽”实现流程定义建模。
2、 遵循WFCM、BPMN规范
3、 快速嵌入到任意基于业务系统平台技术的目标系统
4、 自定义业务开发表单开发
5、 智能识别接入目标系统的组织架构
6、 丰富的扩展性
7、 轻巧灵活,国内.Net.net、Java技术平台最轻量级的工作流引擎
8、 高达67种丰富的流程流转模式
9、 单个活动步骤支持单一签核、多人并签、多人抢占三种响应方式
流转模式支持:
1. 顺序
是最为简单,也最为容易理解的模型。按照预定的任务列表,有序的执行.
2. 子流程模式
内嵌式子流程
3. 自循环模式
同一个任务节点,重复的执行多次。比如A是自动环节,那么当A的待办处理人处理后可再次发给A环节的其它处理人处理,直至A环节处理人不再发给A环节为止。
4. 并行会签模式
流程运行过程中,因为不同的条件或情况,或者处理的业务需要多部门(多任务)分开处理,而产生了流程分支,并且这些分支同时并行运行。
5. 异或分支选择
也叫“独占式选择”从多个路径中选择一条路径执行,当一个任务处理完后,发现其后面可允许走多个分支流程,但只允许选择其中某一个分支运行。
6. M选N分支多路分支
从M个路径中选择N路径执行,与并行类似,但是后续分支可以多选,即M条后续路径时可以选择的路径条数是:1<=N<=M.
7. 条件路径分支
支持线上设置路径条件,会根据条件来自动选择下一路径走向。
8. 异或聚合
即当有一条分支到达就聚合完毕。环节即可继续往下走。即先到先得,先进先出。
9. 并行聚合
与并行会签对应,即所有前继分支都必须到达才生效,否则会一直等待。
10. 多路聚合
M选N多路合并聚合,与M选N分支对应。
11. 多路数量达到聚合
当到达数量达到条件设置值时聚合,可设置由到达数量来决定是否聚合完毕。
12. 多路指定必达路径聚合
设置必到达路径分支,只有当所有必达路径到达时则合并,非必达路径为可选到达。
13. 退回提单
即被打回到提单。
14. 退回上一环节
15. 退回历史任意活动
16. 分支退回主干
17. 会签内退回会签外
即会签内分支退回到会签外,这时流程引擎会自动回收其它分支上的任务。
18. 外嵌入子流程
19. 内嵌套子流程退回到主干流程。
20. 取消
即将流程直接作废。
21. 挂起
暂时冻结流程的运转。被挂起的流程实例只能查看,不能处理待办。
22. 解挂起
起挂起对应,解除挂起后流程的待办继续可处理。
23. 撤回
即由提单人主动取回的意思,提单后发现填写的数量有问题时,当下一步的处理人未读未看时可以在已办在打开将流程工单撤回到草稿箱。
举例:科员起草了一份文件,交给处长审批。但处长还没有察看的情况,科员有权取回文件,重新修改。
24. 转交
转交由其他人协助处理,即将流程工单转由他人处理。
25. 传阅
传阅即知会的意思,理解为将此工单信息共享给指定的人,被传阅者只能查看或评论,但不能处理工单。相当实例生活中的知会其他有这事情的发生。
26. 委托代办
一个任务交给了员工A(角色A)处理,但是员工A最近出差,无法正常办理,就可以
委托给员工B(可能是角色A,也可能是角色B )处理,以保证流程能够正常的进行下去。
27. 催办
在催办管理,可随时向指定的流程当前处理人发送催办请求,以催促任务的执行。
28. 自动超时催办
在流程定义时设置指定环节的处理时长,当超过时长时会自动发送催办消息给流程环节的待办处理人。
29. 加签
30. 改签
31. 动态聚合
自动根据前继一个步长活动自行判断是否可聚合,形成动态聚合,即聚会可能是等一个分支,也可能是等两条分支,完全根据发散步骤当时发发出去是几条分支。
32.多实例分组并行模型