流程引擎设计的一些思考

发布时间 2024-01-09 16:45:53作者: 粒子先生

技术选型

对比维度
Activiti7
Flowable6
Camunda
JBPM
JFlow
规范 BMPN2.0、XPDL、JPDL BMPN2.0、XPDL、JPDL BMPN2.0、XPDL、JPDL BMPN2.0 BMPN2.0、Ccbpm
成熟度
使用成本 较低 较低
技术生态 Aifresco Tijs Rademakers Camunda JBoss 驰骋
开发体验 好,需汉化 好,需汉化

好,需汉化

文档 较少 较少 较少 较少
活跃度 活跃 活跃 活跃 活跃 一般
开源情况 开源 开源+商业 开源+商业 开源 开源
数据库持久层 Mybatis JPA Hibernate JPA  
持久化标准 JPA规范 JPA规范 JPA规范 JPA规范 JPA规范
事物管理 Mabitas机制、Spring事务控制 Hibernate机制、Spring事务控制 Hibernate机制、Spring事务控制 Bitronx、基于JTA事务管理  
分布式事务 Mabitas机制、Spring事务控制   补偿机制,SAGA模式 Bitronx、基于JTA事务管理  
支持数据库 H2、Mysql、Oracle、Postgers、Db2、Mssql Mysql、Oracle、Postgers、Mssql Mysql、Oracle、Postgers、Mssql Mysql、Postgers Mysql、Oracle、Mssql
集群部署 支持 支持 支持 支持 支持
内部服务通讯 Service间API调研 Service间API调研 Service间API调研

基于Apache Mina异步通讯

 
集成接口 SOAP、Mule、RESTful SOAP、Mule、RESTful SOAP、Mule、RESTful 消息通讯 SOAP、Mule、RESTful
引擎核心 去除PVM(流程虚拟机) 去除PVM(流程虚拟机) PVM Drools 自研
架构 Springboot2 Springboot1.5 Springboot2 Kie Springboot2
技术前身 jBPM4 Activiti6 Activiti5 Drools Flow 自研
二次开发难度 一般 一般 一般 较难 一般

整体架构

功能模块

触发器

  • 工作表
  • 时间
  • 日期
  • 组织人员事件
  • 外部人员事件
  • webhook

动作节点

  • 数据处理
  • 人工
  • 构建
  • 人员、部门、协作
  • 开发者

流程管理

  • 启停
  • 状态管理
  • 统计分析
  • 监控
  • 待办任务
  • 已办任务
  • 历史任务

网关

  • 并行网关
  • 排他网关
  • 包含网关

工作流状态

  • 草稿
  • 提交
  • 驳回
  • 作废
  • 暂存
  • 转办
  • 转阅

工作流操作

  • 加签
  • 会签
  • 流转
  • 驳回
  • 撤回
  • 结束

高级功能

  • 多人会签
  • 跨系统审批
  • 表单数据批量处理
  • 子流程

接口SDK

  • 角色、用户接口
  • 触发器接口
  • 动作节点接口
  • 流程操作接口
  • 流程历史接口

与表单引擎的关系

动态表单、普通表单、外置表单

用户对接

封装通用的用户对接方法,对接系统用户。待详细调研。

其他

一个流程模板可生成多个实例(如对象实例化一样),每个实例中包含多个处理步骤,每个处理步骤中蕴含了所指定的表单(数据呈现)、处理动作、运转规则、提醒处理等。

其中处理动作主要是:草稿,提交,驳回,作废,暂存,转办,转阅。

处理规则就是根据流程的运转模型而定,顺序模式,单选模式,并行分支模式,汇聚模式,转办模式,驳回模式等

而表单,则是流程步骤处理时的数据展现形式,可理解为页面。里面的数据及呈现需根据自身业务情况而定。流程与表单的结合是一个难点。