`
wxz258
  • 浏览: 1580 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

activiti、flowable、camunda开源流程引擎该如何选择

阅读更多

 

市场上比较有名的开源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。其中:Jbpm4、Activiti、Flowable、camunda四个框架同宗同源,祖先都是Jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个。开发低代码平台、OA系统、BPM软件均需要流程可视化功能,而流程可视化核心是流程引擎和流程设计器,对于市场上如此多的开源流程引擎,哪个功能和性能好,该如何选型呢?

 

一、主流开源流程引擎介绍

1、Osworkflow

 Osworkflow是一个轻量化的流程引擎,基于状态机机制,数据库表很少,Osworkflow提供的工作流构成元素有:步骤(step)、条件(conditions)、循环(loops)、分支(spilts)、合并(joins)等,但不支持会签、跳转、退回、加签等这些操作,需要自己扩展开发,有一定难度,如果流程比较简单,osworkflow是很号的选择,笔者在2008年给某大型国企集团开发OA系统,就是基于Osworkflow,至今仍稳定运行,性能也很高。官方网站:http://www.opensymphony.com/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也已不是主流技术。笔者在2012年开发某集团BPM平台时,选择的就是JBPM4.4版本,也是4系列的最后一个版本,进行了大量的扩展开发,才实现中国特色的流程需求。现在时间节点选择流程引擎,JBPM不是最佳选择。官方网站:https://www.jbpm.org/

3、Activiti

activiti由Alfresco软件开发,目前最高版本activiti 7。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谨慎选择。官方网站:https://www.activiti.org/

 

4、flowable

flowable基于activiti6衍生出来的版本,flowable目前最新版本是v6.6.0,开发团队是从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)等模块。官方网站:https://flowable.com/open-source/

 

5、Camunda

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

选择camunda的理由:

(1)通过压力测试验证Camunda BPMN引擎性能和稳定性更好。

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

 

 

 

二、flowable与Camunda对比分析

1、功能方面对比

 

由于Flowable与Camunda好多功能都是类似的,因此在这里重点罗列差异化的功能

 

(1)camunda支持流程实例的迁移,比如同一个流程有多个实例,多个流程版本,不同流程实例运行在不同的版本中,camunda支持任意版本的实例迁移到指定的流程版本中,并可以在迁移的过程中支持从哪个节点开始。

 

(2)camunda基于PVM技术,所以用户从Activii5迁移到camunda基本上毫无差异。flowable没有pvm了,所以迁移工作量更大(实例的迁移,流程定义的迁移、定时器的迁移都非常麻烦)。

 

(3) camunda对于每一个CMD命令类都提供了权限校验机制,flowable没有。

 

(4)camunda继续每一个API都有批处理的影子,flowable几乎没有。比如批量挂起流程、激活流程等,使用camunda可以直接使用API操作,使用Flowable则只能自己去查询集合,然后循环遍历集合并操作。

 

(5)camunda很多API均支持批处理,在批量处理的时候可以指定是异步方式操作或者是同步方式操作。异步的话定时器会去执行。Flowable没有异步批处理的机制。比如批量异步删除所有的历史数据。

 

(6)camunda启动实例的时候支持从哪个节点开始,而不是仅仅只能从开始节点运转实例。Flowable仅仅只能从开始节点运转实例。

 

(7)camunda支持任意节点的跳转,可以跳转到连线也可以跳转到节点,并且在跳转的过程中支持是否触发目标节点的监听器。flowable没有改原生API需用户去扩展。

 

(8)camunda支持双异步机制,第一个异步即节点可以异步执行,第二个异步方式是:完成异步任务后,还可以继续异步去执行任务后面的连线。所以称之为双异步机制,flowable只有第一种异步方式。

 

(9)camunda支持多种脚本语言,这些脚本语言可以在连线上进行条件表达式的配置,开箱即用。比如python、ruby、groovy、JUEL。flowable仅仅支持JUEL、groovy。开箱即用的意思就是如果想用python直接引入jython包就可以用了,不需要额外配置。

 

(10)camunda支持外部任务,比如我们有时候想在一个节点中执行调用第三方的API或者完成一些特定的逻辑操作,就可以使用外部任务,外部任务有两种表,并支持第三方系统定期来抓取并锁定外部任务,然后执行业务完毕之后,完成外部任务,流程实例继续往下执行。外部任务的好处就是解决了分布式事物的问题。在flowable中我们可以使用httpTask任务,我个人更倾向于camunda外部任务,因为这个外部任务有外部系统决定什么时候完成,httpTask是不等待任务,实例走到这个节点之后,调用一个api就直接往下跑了,外部任务不会继续往下跑,有外部系统去决定啥时候往下跑。

 

(11)camunda支持为用户定制一些个性化的偏好查找API,比如张三每次查询任务的时候,一般固定点击某某三个查询条件过滤数据,使用camunda就可以将这三个查询条件进行持久化,下次张三来了,就可以直接根据他的偏好进行数据的过滤,类似机器学习。

 

(12)camunda支持历史数据的批量删除或者批量迁移到其他介质,比如批量迁移到es,flowable没有该机制。

 

(13)camunda支持在高并发部署流程的时候,是否使用锁机制,flowable没有该机制。

 

(14) camunda支持单引擎多组合、多引擎多库。flowable仅仅支持单引擎多组合。

 

(15) camunda支持流程实例跨流程定义跳转,flowable没有该机制。

 

(16) camunda支持分布式定时器,flowable没有该机制。

 

(17) flowable支持nosql,camunda只有nosql的解决方案。

 

(18)camunda支持优化流程,以及了解流程引擎的瓶颈所在和每个环节的耗时,flowable没有该机制。

 

(19) camunda修改了流程模板xml解析方式,相比flowable性能更好。

 

(20)camunda在解析流程模板xml的时候,去除了activiti5的双解析机制,相对而言耗时时间更短。flowable没有了pvm所以规避了双解析机制。

 

(21)camunda可以在任意节点添加任意的属性,flowable原生API没有,需要自己扩展。

 

(22)camunda框架没有为流程生成图片的API(所有流程图展示以及高亮均在前端动态计算),activiti5/6/flowable5/flowable6有图片生成以及高亮的API.

 

(23)camunda可以在节点中定义定时作业的优先级,也可以在流程中进行全局优先级的定义。当节点没有定义优先级的时候可以使用全局的优先级字段。activiti5/6/flowable5/flowable6没有改功能。

 

(24)camunda可以再流程中定义流程的tag标记,activiti5/6/flowable5/flowable6没有改功能。

 

(25)camunda/activiti5/6/flowable5/flowable6 均不支持国产数据库,比如人大金仓 和 达梦。

 

(26)flowable6支持LDAP,openLDAP,camunda不支持。activiti5不支持。

 

 

 

2、性能方面对比

 

通过flowable和camunda多组对比测试,camunda性能比flowablet提升最小10%,最大39%,而且camunda无报错,flowable有报错,camunda在高并发场景下稳定性更好。

 

详细测试参考:flowable与camunda性能对比测试_大龄码农有梦想的博客-CSDN博客_flowable和camunda

 

 

 

三、选型推荐

推荐大家使用camunda(流程引擎)+bpmn-js(流程设计器)组合,笔者在多个项目中经过实战验证,camunda在功能方面比flowable、activiti流程引擎强大,性能和稳定性更突出,

在线体验环境:http://www.yunchengxc.com。

 

 

 

分享到:
评论

相关推荐

    流程引擎(Flowable+Activiti)

    Flowable是一个高度灵活且可扩展的开源流程引擎,它支持BPMN 2.0标准,使得业务流程的建模和执行变得直观易懂。Flowable提供了强大的API,可以方便地集成到各种应用程序中,实现流程自动化。在6.4.2版本中,Flowable...

    Activiti(Flowable) 流程实例克隆解决方案1

    Activiti(Flowable) 流程实例克隆解决方案1

    activiti6迁移camunda7.15.0sql.txt

    众所周知,camunda是由activiti5演变而来的,所以由activiti5迁移到camunda是非常丝滑的,官网上也有迁移需要的sql脚本,但是activiti6的迁移官网原文是这么说的:If you are on a more recent Activiti version or ...

    camunda-modeler-3.0.0-win-x64 activiti流程图插件

    Activiti是Camunda BPM中的核心组件,它是一个开源的工作流引擎,能够执行基于BPMN模型定义的流程。Activiti不仅支持标准的BPMN 2.0,还提供了丰富的API和工具,使得开发人员能够轻松地将流程集成到各种应用程序中。...

    中国式传统流程引擎开源标杆

    2. **引擎适配**:根据项目需求,选择或切换Activiti、Flowable或Camunda作为后端流程引擎。 3. **前端交互**:结合RuoYi-Vue-Pro-Camunda提供的前端界面,实现用户友好的流程操作和监控。 4. **扩展与定制**:通过...

    flowable流程引擎-核心表分析

    Flowable流程引擎核心表分析 流程引擎的核心表是Flowable流程引擎的基础组件,用于存储流程引擎的各种数据。...Flowable流程引擎核心表的设计遵循了Activiti的传统,提供了一个灵活、高效、可扩展的流程引擎解决方案。

    Activiti7的开源项目,用于二次开发!

    Activiti7是一个强大的开源工作流引擎,主要用于企业业务流程管理(BPM)系统。这个开源项目为开发者提供了丰富的工具和API,便于进行二次开发,实现高效的企业级流程自动化。在这个sunny-activiti-master压缩包中,...

    axtiviti和camunda相互转换.txt

    在设置assignee和candidateUsers,candidateGroups时, activiti无法解析,只有将其前缀从camunda改为activiti时,才可以使用。 如:"activiti:assignee" 思路 替换命名空间和标签: camunda-> activiti xml/bpmn ...

    Activiti7(流程引擎)简单笔记,附带作者执行的Demo代码文件

    Activiti7是一款强大的开源工作流引擎,用于在Java应用程序中实现业务流程自动化。它基于模型驱动的架构,允许开发者通过BPMN 2.0标准来设计、部署和执行流程。这个“Activiti7(流程引擎)简单笔记”很可能是作者在...

    Flowable工作流实战课程

    Flowable是Activiti原班人马开发的一套新的工作流框架,支持了cmmn引擎以及dmn引擎。重构了Activiti的源码,使Flowable的性能更加的流畅。课程可以让大家快速入门 Flowable。 让零基础的学员通过学习一步步成为使用...

    适配达梦数据库的activiti流程引擎主要jar包(activiti-engine-7.1.0.M3.1.jar已修改源码)

    3、已经对该流程引擎的activiti-engine-7.1.0.M3.1.jar进行了源码修改,下载直接使用即可,同时支持达梦数据库服务器多个数据库实例的场景,网上大多修改的方法只适合单个数据库实例(多个数据库实例下流程引擎的数据...

    Activiti流程设计器代码

    Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于Java的超快速、超稳定的 BPMN2.0 流程引擎,强调流程服务的可嵌入性和可扩展性,同时更加强调面向业务人员。 Activiti 流程引擎...

    activiti 5.22流程图连线名称不显示bug修复

    在企业级应用开发中,Activiti 是一个非常流行的开源工作流引擎,用于处理业务流程管理(BPM)和工作流自动化。它提供了丰富的API、模型器以及可视化的流程设计工具,使得开发人员能够轻松地创建和执行复杂的业务...

    Activiti可视化流程设计器

    Activiti是一款开源的工作流引擎,它实现了业务流程管理(BPMN 2.0)标准,为企业级应用提供了强大的流程自动化能力。Activiti Designer则是与Activiti引擎配套的一款基于Eclipse的图形化流程设计工具,它允许开发者...

    activiti代码实现审批流程的审批

    Activiti是一款开源的工作流引擎,它提供了一套强大的API和基于XML的模型定义语言,用于在Java应用中实现业务流程管理(BPM)系统。在本文中,我们将深入探讨如何利用Activiti代码来实现审批流程的审批功能。 首先...

    activiti流程图查看demo

    Activiti 是一个开源的工作流和业务自动化引擎,它支持企业级的业务流程管理(BPM)系统和模型驱动的应用程序。这个"activiti流程图查看demo"是一个示例项目,旨在帮助用户理解如何在Activiti中查看和操作流程图。在...

    基于activiti的采购审批流程

    Activiti是一款开源的工作流引擎,它提供了强大的流程定义、执行和监控能力,尤其适合构建复杂的审批流程。本示例将重点介绍如何使用Activiti实现一个采购审批流程。 首先,我们要理解什么是Activiti。Activiti是由...

    Activiti工作流整合Web流程设计器整合

    Activiti工作流引擎是一款强大的开源工作流解决方案,它基于模型驱动的架构,旨在为企业提供灵活、可扩展的业务流程自动化能力。在这个“Activiti工作流整合Web流程设计器整合”主题中,我们将深入探讨如何将...

    使用activiti工作流引擎显示流程图时高亮显示流程图中已执行节点和已执行路径方法源代码

    Activiti 是一个开源的工作流引擎,它基于 BPMN 2.0 标准,提供了一套完整的流程定义、执行和监控工具。本文将详细探讨如何在 Activiti 中实现流程图的高亮显示,特别是已执行的节点和已执行路径。 首先,理解 ...

Global site tag (gtag.js) - Google Analytics