https://camunda.com/
https://www.jianshu.com/p/5942c4ee513c
https://zhuanlan.zhihu.com/p/484107368
https://www.jianshu.com/p/1fbbb5f1760f
https://www.ithere.net/article/1454000794869297153
https://blog.csdn.net/ztx114/article/details/123549773
https://blog.csdn.net/xiaolong2230/article/details/128291393
http://www.javashuo.com/article/p-hccwoxde-cq.html
https://www.bbsmax.com/A/n2d9Nb6ozD/
参考链接:
选型的几个标准:
- 社区活跃,至少在Github上能排上名的
- 至少支持BPMN2协议的
- 免费、开源
根据上面的标准,目前几大工作流引擎就只有Activiti、Flowable和Camunda了,有些人会问为什么没有AirFlow相关的呢?很明显,AirFlow属于编排类流程引擎,跟工作流没太大关系,他们的共同点就是流程控制,工作流引擎>=编排类引擎。先给一个表格,下面给一些具体解释。
对比项\引擎 | Activiti-7.x | Flowable-6.x | Camunda- |
---|---|---|---|
商业化 | √ | √ | √ |
路线(Roadmap) | 云 | 工具型 | 轻量&工具型 |
PVM引擎 | × | × | √ |
BPMN2引擎 | √ | √ | √ |
CMMN引擎 | × | √ | × |
DMN引擎 | × | √(开源版支持不太好) | √ |
建模工具选型 | √(AngularJS) | √(AngularJS) | √(Bpmn.js&Camunda Provider) |
建模工具内容 | BPMN2 | BPMN2/CMMN/DMN | BPMN2/CMMN/DMN |
扩展节点(Mule\Http等) | × | √ | √ |
Spring Boot | √ | √ | √ |
Spring Cloud | √ | × | × |
Web控制台 | √ | √ | √ |
Rest接口 | √ | √ | √ |
历史异步归档 | × | √ | × |
异步任务全局锁 | × | √ | × |
上面的对比可能不完全,笔者在工作中选用的是Flowable核心+Camunda的编辑器,但并不是说Flowable一定好,下面做一些简单说明和一些选型的指导。
- Activiti:Activiti在目前来看有点不思进取,核心功能和内核的优化并没有太大进步,着力点全在商业版和云上面,核心只支持BPMN2协议,跟6版本没有什么区别。如果你是一个老的Activiti使用者,并且只是用BPMN2协议,可以选用Activiti(非Cloud版本)。
- Flowable:Flowable不管是功能层面还是在代码层面来讲,都是这3个中最重的,当初跟Activiti分道扬镳的原因也是因为理念不一样,Flowable更注重其功能性、扩展性和性能。在上面表格中,历史异步归档和异步任务全局锁都是对性能的极大优化,特别是异步任务这一项,当年在使用Activiti的使用是一个极大的困扰,因为异步任务的吞吐反而会随着实例数的增加而加速恶化。Flowable比较臃肿,它支持了太多的东西,以致于如果想做POC或者Demo,环境搭建这一步都够呛。但是如果你本身就想做一个扩展性强的,性能高的工作流平台(SaaS\PaaS),Flowable是不二的选择。
- Camunda:Camunda是这3个里面比较轻量的一个,但是它并没有去掉PVM这个性能较差的流程推动引擎,所以如果你对性能要求很高的话,PVM肯定是不能满足的(Activiti已经在6.X版本的时候放弃了PVM,Flowable亦是如此)。但是Camunda有一个好东西就是它的编辑器,它是基于http://bpmn.io的bpmn.js,cmmn.js,dmn.js来开发的,并且开源了自己的组件库,所以,如果你想做一个轻巧的、灵活的、定制性强的编辑器,工作流是嵌入式的,那么Camunda是一个好选择。
什么是工作流?
工作流,是指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。
在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分。
工作流是复杂版本的状态机
就好比一般的请假流程,小明会先提出请假申请,然后由Leader审批或者Manager进行审批,直至审批通过或者拒接。
如果让我们实现请假单状态的切换,那么用一个字段来标识就可以了。
然而对于复杂的状态或者状态维度增加且状态流转的条件极为复杂,可能单纯用字段记录状态的实现方式就会不那么理想。
工作流解决的痛点在于,解除业务宏观流程和微观逻辑的耦合,让熟悉宏观业务流程的人去制定整套流转逻辑,而让专业的人只需要关心他们应当关心的流程节点,就好比大家要一起修建一座超级体育场,路人甲只需要关心他身边的这一堆砖是怎么堆砌而非整座建筑。
Java工作流开源框架
目前主流的开源框架就是Activiti/Camunda/Flowable,它们都源自于jbpm。
先是有了jbpm4,随后出来了一个Activiti5,Activiti5经过一段时间的发展,核心人员出现分歧,又分出来了一个Camunda。
activiti5发展了4年左右,紧接着就出现了Flowable。
下面我们就来分别简单认识下这三兄弟
一、简介
Activiti
Activiti 是一个针对业务人员、开发人员和系统管理员的轻量级工作流和业务流程管理 (BPM) 平台。 它的核心是一个用于 Java 的超快速和坚如磐石的 BPMN 2 流程引擎。 它是开源的,并在 Apache 许可下分发。 Activiti 可以在任何 Java 应用程序、服务器、集群或云中运行。 它与 Spring 完美集成,非常轻量级,基于简单的概念。
Activiti Cloud 现在是新一代的业务自动化平台,提供一组旨在在分布式基础架构上运行的云原生构建块。
github地址:https://github.com/Activiti/Activiti
主要服务类:
调用方式:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
TaskService taskService = processEngine.getTaskService();
ManagementService managementService = processEngine.getManagementService();
IdentityService identityService = processEngine.getIdentityService();
HistoryService historyService = processEngine.getHistoryService();
FormService formService = processEngine.getFormService();
DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();
设计器
activiti6 官方提供有Web设计器(Modeler设计器)。部署运行activiti-modeler模块即可使用.
activiti7 推荐使用bpmn.io提供的bpmn-js设计器,在线使用地址:https://demo.bpmn.io/new
Flowable
Flowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据
主要服务类:flowable服务类和activiti类似,没有太大的变化
设计器:eclipse插件,支持5.x版本,不支持6.x版本中新增加的节点和属性,online web设计器基于AngularJs1.x版本开发, 如下:
兼容性:
- Alfresco Activiti5
- Flowable5
Camunda
Camunda 是一个基于 Java 的框架,支持用于工作流和流程自动化的 BPMN、用于案例管理的 CMMN 和用于业务决策管理的 DMN。
工作原理:
设计器
兼容性:
- Active BPEL
- Alfresco Activiti
- Appian BPM
- Bonitasoft
- JBoss jBPM
- IBM WPS / IBM BPM / IBM MQ Workflow / IBM Lotus Notes
- Oracle BPM
- Software AG Webmethods
- Pega BPM
二、支持DB对比
三、功能对比
- Flowable VS Activiti
小结:
Flowable的核心思想更像是在做一个多彩的工具,它在工作流的基础功能上,提供了很多其他的扩展,使用者可以随心所欲地把Flowable打造成自己想要的样子
Activiti7着重于处理bpmn,它的方向在于云,他的设计会尽量像例如Spring Cloud、Docker、K8S靠拢。
Flowable在功能上比Activiti更加完善,基础轮子也更加全面。所以在开发契合国内特色的工作流系统中,Flowable是更佳的选择。
目前两者陆续都开始了商业化,同时也都支持了分布式和云端部署。
- Flowable VS Camunda
小结:
Flowable从6.4.1版本开始大力发展其商业版产品,开源版本也不在及时维护。部分功能已经不再开源版发布,比如表单生成器(表单引擎)、历史数据同步至其他数据源、es等等。
dmn目前是个半成品,没有Camunda稳定和好用,对于dmn规范支持薄弱。部分商业版的组件被商业化,因此开源版不再维护。Mongdb目前也放到商业产品中了,开源版的几乎不能用。
在高并发场景下,Camunda性能比Flowable要好些,报错的几率也低很多。
四、社区活跃度对比
Flowable
Activiti
Camunda
小结:从github活跃度来看, activiti和flowable比较相似,camunda最不活跃(可能是过去国人关注的少,中文文档也欠缺)。
总结:
在微服务、云计算、服务编排、LCDP等大环境下,camunda的前景优势会慢慢体现出来,作为下一代的工作流引擎,也会逐渐引起更多人的关注。
Activiti和Flowable作为传统的工作流引擎,其设计思想和理念还是很值得CRUD boy们去学习研究下的。