工作流选型

对比

1 工作流简介

1.1 是什么

工作流(Workflow),就是通过计算机对业务流程自动化执行管理。
是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递
它主要解决的是使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现,如常见的审批流程,总之,有"业务流转"流程化的场景,都可以使用工作流.

1.2 为什么

复杂繁多的业务流程如果采用if else实现那将是崩溃的,代码不可维护,业务流程在代码中可读性很差,所以高人设计了业务流程模型图示BPMN2.0,要做到就是把业务场景抽象为标准流程图,把流程图丢到流程引擎中按流程定义约定逐步流转,很显然扩展性和业务可描述性会好很多,
所以工作流引擎主要用于解决复杂的业务,目前经常被提起的中台系统抽象业务为服务,也涉及大量智能的业务流程引擎做支撑。

1.3 BPMN2.0补充

BPMN2.0(Business Process Model and Notation)是一套业务流程模型与符号建模标准
  精准的执行语义来描述元素的操作
  以XML为载体,以符号可视化业务

2 常用工作流引擎

对BPMN2.0实现比较好的是Activiti Flowable和jBPM

2.1 activiti

简介
Activiti是由jBPM 的创建Tom Baeyen离JBoss之后建立的项目,构建在开发 jBPM 版本1到4时积累的多年经验的基础之上,旨在创建下一代的 BPM 解决方案。
 Activity 相对简单,仅有流程引擎,没有表单引擎。在BPM的研究领域, 很多的学者,专家都是把流程引擎与表单引擎分开的
流程定义是线下按照bpmn2.0标准去描述业务流程,通常使用activiti-explorer(web控制台)或activiti-eclipse-designer插件对业务流程进行建模,这两种方式都遵循bpmn2.0标准。
优势
从技术组成来看,Activiti最大的优势是采用了PVM(流程虚拟机),支持除了BPMN2.0规范之外的流程格式,与外部服务有良好的集成能力,延续了jBPM3、jBPM4良好的社区支持,服务接口清晰,链式API更为优雅
Activiti上手比较快,界面也比较简洁、直观
Activiti 相对丰富的资料,并且高度与 SpringBoot 集成
成熟、稳定、满足BPMN2.0规范
用户众多,社区活跃,趋势良好
易于上手,基于Spring、MyBatis常用互联网技术堆栈作为技术底层
劣势
持久化层没有遵循JPA规范
Activiti 对表单的支持目前还是比较弱的,流程表单设计还是需要开发人员去处理
Activiti的简单demo实验不难,但是若想结合实际业务灵活使用Activiti,需要花费不少时间。

2.2 flowable

简介
2016 年 10 月,Activiti 工作流引擎的主要开发者离开 Alfresco 公司并在 Activiti 分支基础上开启了 Flowable 开源项目,是Activiti的一个分支
activiti5以及activiti6、flowable是Tijs Rademakers团队开发的。
Activiti7是 Salaboy团队开发的。activiti6以及activiti5代码目前有 Salaboy团队进行维护。因为Tijs Rademakers团队去开发flowable框架了,所以activiti6以及activiti5代码已经交接给了 Salaboy团队(可以理解为离职之前工作交接)。目前的activiti5以及activiti6代码还是原Tijs Rademakers原有团队开发的。Salaboy团队目前在开发activiti7框架。对于activiti6以及activiti5的代码官方已经宣称暂停维护了。activiti7就是噱头 内核使用的还是activiti6。并没有为引擎注入更多的新特性,只是在activiti之外的上层封装了一些应用。activiti6的很多框架bug在flowable框架中已经修复的差不多了,可以实现零成本从activiti迁移到flowable
也新增了很多功能,如flowable支持jms、rabbitmq、mongodb等方式处理历史数据

2.3 jBPM

简介
jBPM是公开源代码项目,jBPM在2004年10月18日,发布了2.0版本,并在同一天加入了JBoss,成为了JBoss企业中间件平台的一个组成部分,它的名称也改成JBoss jBPM。
优势
jBPM最大的优势是采用了Apache Mina异步通信技术,采用JPA/JTA持久化方面的标准,以功能齐全的Guvnor作为流程仓库,有RedHat(http://jBoss.org被红帽收购)的专业化支持
劣势
对自身技术依赖过紧且目前仅支持BPMN2
JBPM 网上集成的资料甚少,且新版本相对比较笨重。
jBPM7主要与JBoss下的规则引擎集成较好

2.4 jFlow

简介
jFlow属于济南驰骋信息技术有限公司的开源项目,向社会100%开源。研发于2003年,到一直持续到现在,功能强大丰富,图形化的配置,功能性配置较高,在中国国情下成长起来的优秀的工作流引擎。在国内有一定的市场地位,是国内著名的老牌工作流引擎。
前身ccFlow,.NET开源的工作流. jFlow是java版本
优势
jFlow是JFlow流程引擎+CCForm的表单引擎的有机结合,内容相对复杂,配置程度较高,实施周期短,上手快。
劣势

3 整体对比

适用场景
如果是需求比较明确,流程相对固定的情况,建议自行开发。
如果是流程非常复杂,流程中分支特别多,可以考虑使用
最好是抱着完全摸清楚表结构,并适当二次开发,来适应需求

工作流引擎 功能 文档 环境部署
Activiti 支持绝大部分工作流功能,符合中国国情的审批流程需要在此基础上进行开发。 文档丰富,csdn有相应专栏,并且国人贡献了一本《activiti实战》详细的讲解了基于activiti的开发内容,网上教程资源丰富。 官方提供webapp war包,部署在Tomcat下可快速操作和了解activiti,eclipse提供支持activiti项目的ide插件,总的来说环境支持良好。
jBPM 支持绝大部分工作流程,符合中国国情的审批需继续二次开发。 中文文档相对匮乏,网上教程资源参考价值不大。 -
jFlow 支持大部分流程的基础功能:前进、后退、转向、转发、撤销、抄送、挂起、草稿、委托代办,也支持高级功能取回审批、项目组、外部用户等 公司提供完整详细的接口文档和操作手册,属于国内公司开源项目,有专门的BBS论坛 官方提供快速运行体验http://demo.ccflow.org/,也可按照教程部署到本地Tomcat下访问本地http://127.0.0.1:8080/jflow-web/地址测试。

学习成本 Activiti上手比较快,界面也比较简洁、直观,学习周期相对较短。 功能丰富复杂,众多的api接口,全英文的文档,因此学习周期比较长 资源相对丰富,文档接口完善,需要学习内容较多,但有良好的文档支持,学习周期一般。
项目规模及二次开发难度 代码量大,核心代码改动难度较大,但提供了完整的技术文档,架构良好,网上开发文档较多,一定上降低了二次开发的难度 代码量大,核心代码改动难度较大,技术文档少,二次开发难度大。 整个核心源码大小在10M左右,官方提供几个demo开发教程,并且有相关的BBS论坛,一定上降低了二次开发的难度。
可视化流程表单设计器 支持,用户体验好,但是流程设计器是英文版,还需要汉化。 支持,但是用户体验不好,设计器属于英文版本,需要汉化。 支持,用户体验好,设计器属于中文版本,支持绑定表单格式。
表单设计器 支持多种表单:动态表单,外置表单,普通表单,但表单设计未集成,需要自己集成表单设计。 用户体验不好。 用户体验好,提供设计的表单组件,表单设计所见即所得,功能丰富。
官方文档 https://www.activiti.org/userguide/index.html https://docs.jboss.org/jbpm/release/7.33.0.Final/jbpm-docs/html_single/ http://ccbpm.mydoc.io/
附:
flowable对比activiti6新增的功能
flowable目前已经支持加签、动态增加实例中的节点、支持cmmn、dmn规范。这些都是 activiti6目前版本没有的。
1、flowable已经支持所有的历史数据使用mongdb存储,activiti没有。
2、flowable支持事务子流程,activiti没有。
3、flowable支持多实例加签、减签,activiti没有。
4、flowable支持httpTask等新的类型节点,activiti没有。
5、flowable支持在流程中动态添加任务节点,activiti没有。
6、flowable支持历史任务数据通过消息中间件发送,activiti没有。
7、flowable支持java11,activiti没有。
8、flowable支持动态脚本,,activiti没有。
9、flowable支持条件表达式中自定义juel函数,activiti没有。
10、flowable支持cmmn规范,activiti没有。
11、flowable修复了dmn规范设计器,activit用的dmn设计器还是旧的框架,bug太多。
12、flowable屏蔽了pvm,activiti6也屏蔽了pvm(因为6版本官方提供了加签功能,发现pvm设计的过于臃肿,索性直接移除,这样加签实现起来更简洁、事实确实如此,如果需要获取节点、连线等信息可以使用bpmnmodel替代)。
13、flowable与activiti提供了新的事务监听器。activiti5版本只有事件监听器、任务监听器、执行监听器。
14、flowable对activiti的代码大量的进行了重构。
15、activiti以及flowable支持的数据库有h2、hsql、mysql、oracle、postgres、mssql、db2。其他数据库不支持的。使用国产数据库的可能有点失望了,需要修改源码了。
16、flowable支持jms、rabbitmq、mongodb方式处理历史数据,activiti没有。

posted @ 2020-07-09 00:00  CosmosRay  阅读(2392)  评论(0编辑  收藏  举报