提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
本文首先介绍了BPMN基本概念以及为什么要引入BPMN;接着对实现了BPMN标准的开源框架进行了简单介绍和对比;然后重点介绍了Camunda BPMN框架的核心概念、框架及最佳开发实践,同时基于Spring Boot框架结合实际业务场景对Camunda的应用进行了介绍;最后是对于流程引擎集成到业务系统的一些注意事项说明。
以下是本篇文章正文内容,参考博客都加了引用说明,如有侵权请联系我删除
BPMN:Business Process Model and Notation,是国际对象管理组织(OMG)基于BPMI在2011年推出的业务流程建模与标记开放标准。如果对OMG和BPMN的理解还不够直观,另外一个同组织同类型的标准----UML,可能会让你更加清楚OMG及其发布的开放标准是什么。以下是OMG官网关于BPMN介绍的两个截图:


BPMN框架概念介绍:
流对象
它们会展示业务流中的行为,并包含以下内容:
活动:人员或系统执行的工作或任务(显示为圆角矩形)。
事件:流程中发生的事情:开始、中间和终止(以圆圈表示)。
网关:描述流程中的顺序流路径(以菱形表示)。其他细节可以包括决策点。
数据对象
数据对象可以提供流程中数据的信息。数据有四种表现方式:
数据输入是与数据相关的任务(以一个卷角页面和右箭头表示)。只有收集到具体数据才能继续往前推进。
数据输出用于显示流程何时生成数据(以一个卷角的页面和实心右箭头表示)。
数据收集(显示为一个卷角的页面,底部中心带有三条实线)是指流程中所需的任何数据收集行为(例如,调查)。
数据存储(显示为容器),用于存储从流程中收集的任何数据。
连接对象
它们将流对象相互连接,或连接至其他信息,并显示流程:
顺序流(以实心右箭头表示)描述了所执行活动的顺序。
消息流(以左侧带有圆圈的虚线右箭头表示)描述了参与者之间的消息流动和流向。
关联(显示为虚线)可以将文本和人工信息链接到事件。
泳道
这个术语代表“池”和“道”。
池:单个流程的“容器”。
道:将池里面的活动再细分成几个部分,可以是垂直的也可以是水平的,以显示职责和事件的位置。
人工信息
人工信息提供了流程的额外细节。它分为两种类型:
组:以虚线的圆角矩形表示,它们围绕一组元素来显示元素之间的关系。
文本注释:只是简单的备注(前面带有一个左括号),读者无需深入查看就可以轻松了解内容,也称为注解。
在不使用BPMN时,如何实现流程控制:
在业务代码里面加入 Status(状态机) 字段维护流程状态,流程负责的审批人可能也是 Hard Code(硬编码),好处是实现流程刚开始会比较快,但是长远来看会出现几个问题:
使用BPMN后:
4. 业务逻辑可视化,开发成员内部以及客户沟通无障碍,利于发现流程缺陷、洞察待改善的潜在领域及促进业务理解一致;
5. 同一组织架构或者同类业务模型可高质量复用,提高开发效率同时提升软件质量;
6. 从设计层面对系统架构进行解耦:流程引擎可以和技术栈无关;
7. 有行业规范,遵循行业标准,有较多成熟框架和工具支持,随着项目中使用的工作流越多,集成BPMN的效用和收益会累计越多
比如说一个业务部门,需要做很多子系统,而这些子系统的办事审批流程以及用户组织架构都是一样的,如果在系统开发初期就引入了流程管理引擎,那么后续子系统开发过程中涉及到流程审批的功能开发工作量都将大大减少,同时系统应对审批流程变更需求的能力也会更强,在流程设计得足够完备、流程子节点代码块执行足够原子性的情况下,我们可以做到在不修改代码的情况下适配新的审批需求。
Jbpm:Jboss开发,基于Drools Flow,技术框架较陈旧(如使用Hibernate进行持久化)国内使用较少;Activiti:版本分支较多,Activiti 6遗留较多BUG,Activiti 7也是云原生;Flowable:Activiti 6衍生版本,商业版功能强大,开源版本功能较受限;Camunda:基于Activiti 5,开源版本的性能、功能与云原生架构,具有很大优势;
Osworkflow:基于状态机机制的流程引擎,适用于简单流程;
下面摘抄一段大牛的总结:
Activiti和Flowable都是来自于一个叫JBPM的开源工作流。在早期Jboss(现已被ReHat收购)发行JBPM4的时候,因为合作伙伴关系闹的不开心。于是其中一个核心人员离职。加入了Alfresco(Activiti所在的公司)。并在同一年发布了Activiti的第一个版本即Activiti5.0.alpha1。这个版本号直接从5.0开始就很有意思了。表示其为携带了JBPM4的所有特性。正式叫板JPBM4。JBPM4也是被使用的最广的一个版本之一其中正有我的老东家(工作流只是个辅助业务的,我老东家在上面自己做了很多东西,故升级版本是不现实的)。也在同一年,Jboss对JBPM4进行了重构,使用了自己公司新研发的一套规则引擎Drools进行重构。将JBPM4升级到了JBPM5。但是那时候国内更多软件基于Tomcat上进行部署,JBoss所用甚少。故JBPM后续版本在国内占据市场远远不如Activiti。Activiti就一直在5.0这个版本一直迭代开发。 国外的开源软件有个好习惯就是:在当前开发的这个版本趋于稳定的时候,会开始陆陆续续构建下一个大版本。Activiti那时候也想的很美好。5.0这个版本这么稳定了,6.0应该没什么问题。但是,天要下雨,娘要嫁人。Activiti的创作者,也因为和合作伙伴关系闹的不开心。又一次上演了离家出走,先后开办了Camunda和Flowable。导致了Activiti最后5.0的问题修复不过来了,官方放弃了这个版本。但是Activiti5可以说的上在工作流的标杆版本之一。至今仍被N多公司进行使用。工作流毕竟只是一个辅助业务的东西,故版本的大升级对于一个公司来说,是代价巨大的。Flowable在开办之初,比Activiti当初直接继承JBPM的版本更为直接。直接继承了他的小版本。直接就从Flowable5.22这个版本开始。和当时的Activiti的小版本一致。
最终:activiti6据说是遗留了很多BUG,然后已经不怎么维护了,团队重点在维护云原生的activiti7的版本,flowable基于activiti6做了很多修复和扩展,所以选择flowable
BPMN建模工具介绍
bpmn-js:BPMN 2.0 渲染工具包和 Web 模型。基于web和原生js开发,支持Vue和React集成
mxGraph:强大的JavaScript流程图前端库,可以快速创建交互式图表和图表应用程序,国内外著名的ProcessOne和draw.io都是使用该库创建的强大的在线流程图绘制网站
Activiti-Modeler:Activiti 开源版本中带了web版流程设计器,在Activiti-explorer项目中有Activiti-Modeler,优点是集成简单,开发工作量小,缺点是界面不美观,用户体验差。
flowable-modeler:flowable开源版本中带了web版流程设计器,展示风格和功能基本跟Activiti-Modeler一样,优点是集成简单,开发工作量小,缺点是界面不美观,用户体验差。
easy-flow
Eclipse插件bpmn2-modeler:C/S版本的流程设计器,如果没有强调基于浏览器设计流程图,也可以考虑Eclipse插件版流程设计器bpmn2-modeler。
简单BPMN示例


Process Definition(流程定义)Process Deployment(流程部署)Process Engine(流程引擎)Process Application(流程应用)Process Variables(流程变量)Process(流程)Process Instance(流程实例) Task(任务) 


需要适配JDK版本:根据本机配置修改地址和端口配置:Camunda相关组件都是基于Java开发,可以通过修改YML配置文件来修改相关运行参数

Camunda官方文档相当强大,对于流程引擎和业务系统的集成,官方已经给出了几个典型的业务场景和最佳实践,大家可以根据自己的业务场景选择集成架构。
通用架构

标准的业务流程解决方案

最佳实践 - 1

最佳实践 - 2

最佳实践 - 3

最佳实践 - 4

业务系统集成流程引擎的基本步骤

业务流程建模

用户操作与流程状态判断JavaScript代码
使用流程引擎的一大好处就是:不需要将流程状态判断写死到业务代码中,我们可以使用轻量级脚本代码去做状态处理。其好处在于解耦具体业务代码,修改起来非常简单。

Spring Boot中引入Camunda依赖及配置

Spring Boot中引入BPMN描述文件
RestFul接口中发起流程实例

业务系统与流程引擎交互 - Service Task保存引擎脚本计算结果

至此,Spring Boot集成Camunda实现BPMN流程管理即集成完毕。总的来说,Camunda的集成过程类似于我们使用Rabbit MQ的过程:提供Camunda Server的配置信息、引入自定义的流程描述文件、业务操作触发一个流程实例、监听流程实例处理状态变更消息(如有必要)对流程实例处理结果进行存储或其他操作。实际流程建模过程会花费较多工作量,至少第一次为组织建模时会多次改版。以下是我建模的结果,实际改了20余版:)

基于Spring Boot集成Camunda 8的典型架构

实际应用过程中,我觉得有以下几个点需要考虑:
最后是一点讨论:如果基于Camunda流程引擎,开发一个低代码管理平台,需要做哪些改进?