工作流引擎技术介绍-Flowable介绍

2,917 阅读9分钟

01、Flowable是什么?

官方定义: Flowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据。

  这里可知,它是用JAVA写的轻量级业务流程,用BPMN 2.0描绘流程,提供了创建流程定义的流程实例,查询,访问运行中或历史的流程实例与相关数据的一套引擎服务。

 在官网的案例中,列举了对客户订单生命周期管理、构建贷款自动化流程、银行保险数字化等参考方向。当然更常见的例子,比如人事流程的入职、请假、工时填报,物流订单、仓库储存、生产线管理等等。

  诚然我们都可以用代码实现所有流程控制,但选择Flowable使用模型而不是代码来描述解决方案的主要原因之一是,可以轻松共享对所描述内容的理解,并且易于快速更改。以贷款申请流程为例虚拟个流程。虚拟贷款流程很简单:

  • 发起人填写基础信息后会根据贷款额流转;
  • 高于13W贷款额会额外需要查询社会征信;
  • 银行征信与社会征信审核确认后会流转到贷款申请审核。

d1.png 这样我们就用流程图把贷款过程串联起来了,如果需要我们甚至能处理查询接口。而相应节点需要处理的表单信息则可以由表单引擎渲染,也可以由业务代码处理。

d2.png

进一步,既然是贷款,必要的风控是少不了的。风险评估、风险监控、风险分析、策略产生、处罚处置、申诉核实等。决策中心是风控平台的大脑。继而,我们就需要利用到规则引擎(决策引擎)。

d3.png

借用流程引擎,我们可以很轻松的描绘出流程,以及实现它,并很好的管理整个流程生命周期。 我们可以根据实际需求,不断细化和完善流程。

d4-1.png

d4-2.png tips: 这里提前说明下吧,流程图画的简洁,那是因为我们把撤回、驳回这些通用的操作,都隐藏在逻辑里了,业务界面按需调用接口即可。(遇到很多人,并不了解这块,当然所有操作都通过连线也有其合理性,这里只是说明并不是那些线条交错的,才显得业务复杂,才显得很牛逼。

2、Flowabl功能

    flowable基于activiti6衍生出来的版本,flowable目前最新版本是v6.7.0,开发团队是从activiti中分裂出来的,修复了一众activiti6的bug,并在其基础上研发了DMN支持,BPEL支持等等,相对开源版,其商业版的功能会更强大。以flowable6.4.1版本为分水岭,大力发展其商业版产品,开源版本维护不及时,部分功能已经不再开源版发布,比如表单生成器(表单引擎)、历史数据同步至其他数据源、ES等。官方网站:flowable.com/open-source…

  其实从历史版本也能看出来,Flowable发展过来,已经不单单关注流程引擎部分开发,而是以流程引擎为基础,衍生到决策引擎、表单引擎、案例模型引擎等其他大功能模块开发。个人认为Flowable作者方向是非常对的。(文末有部分版本演进说明)

快速体验原生设计器: docker run -p8080:8080 flowable/flowable-ui 访问:http://localhost:8080/flowable-ui 账号:admin  密码:test

图片

登录进去,可以看到4大模块,在版本6.7中汉化已经比较完善了。

1.任务应用用来发起流程或者案例,及处理任务。

图片

2.建模器顾名思义就是用来画流程图或者案例图,建表单或者决策表及应用的

这里我们能看到Flowable原生核心五大部分。

业务流程引擎(BPMN)(Business Process Model and Notation)、

表单引擎(Form Engine)

案例模型引擎(CMMN)(Case Management Model and Notation)、

决策引擎(DMN)(Decision Model and Notation)

内容引擎(Content Engines)

图片

3.管理员应用程序,就是用来以管理员视角管理流程或者案例任务的。

图片

4.身份应用程序,用来管理用户体系,包括用户信息、组信息和对应权限信息。

图片

官方博客也给出了一个不错的CMMN 案例:

案例描述索赔场景,有3个连续的阶段:收到索赔,调查索赔,然后处理索赔。流转这个例子可以把案例模型、流程模型、表单模型、决策表模型以及四大模块都能够熟悉一遍。

图片

图片

图片

\

此外从6.5版本引入事件注册表也是非常值得关注的。\

Flowable 事件注册表支持从任何来源接收和发送事件,并为 JMS、Kafka 和 RabbitMQ 提供开箱即用的支持。此外,可以通过 HTTP 接收事件。\

图片

03、Flowable版本历史

版本5.22.0  

  • 瞬态变量

原先所有变量都是 持久化的。这意味着变量和值存储在数据存储中,并保留历史审计数据。瞬态变量则不必。瞬态变量只会存活到下一个“等待状态”。

版本6.0.0.RC1 

  • 分离身份功能 至IDM 引擎
  • 支持非中断事件子流程
  • 分解模块:Flowable Modeler(建模存储、BPMN、表单、DMN 编辑器)、 Flowable IDM(可以使用 disableIdmEngine 属性禁用)、Flowable Admin
  • 引入docker
  • Hibernate逻辑改写MyBatis 

版本6.0.0 - 版本6.0.1 

  • BPMN XML添加了 Flowable 命名空间的支持
  • DMN 引擎中的更多命中策略支持。

版本6.1.0 - 版本6.2.1

  • 异步历史,引入分组和压缩

  • 引入新的 DMN 决策表编辑器,引入审计历史, MVEL 表达式语言替换JUEL 表达式语言。

  • 引入新的 CMMN 引擎,添加了 CMMN 编辑器,提供计时器支持、重复、DMN 和 HTTP 任务支持以及变量查询支持。

  • 表单构建器和渲染器的几个新增内容

版本6.3.0

BPMN

  • 动态任务和子流程注入到正在运行的流程实例中
  • 支持基于事务生命周期的事件侦听器
  • HTTP 任务:支持暂时存储响应变量
  • 多实例:在解析集合时支持 Iterable(例如 ArrayNode)

CMMN

  • REST API 支持所有 CMMN 服务和操作
  • 支持异步服务任务
  • 支持手动激活规则和通过运行时服务启用/手动启动计划项
  • 支持所需规则、支持自动完成、支持完成中性
  • 添加了脚本任务类型
  • 支持用户事件监听器
  • 支持在 Admin 应用程序中查看和管理 CMMN 日期

DMN

  • 支持集合表达式,例如 IN 和 NOT IN
  • 改进了决策表编辑器的用户体验,可以更轻松地在特定规则中添加 JUEL 表达式
  • 支持在 Admin 应用程序中查看和管理决策执行

版本6.3.1 - 版本6.4.0\

  • CMMN 引擎添加了异步历史支持。

  • 添加scope属性使作业服务更加通用,使可以不同作业类型运行不同作业处理程序成为可能。

  • BPMN 引擎中添加了流程实例迁移的第一个版本

  • BPMN 和 CMMN 引擎添加了表达式支持(当customerNumber>40之类的表达式中引用变量并且还没有customerNumber变量时,将引发异常,借助变量表达式{customerNumber > 40} 之类的表达式中引用变量并且还没有 customerNumber 变量时,将引发异常,借助变量表达式{variables:getOrDefault(customerNumber, 0) > 0}可以更好的处理变量。)

  • 支持 MongoDB 持久化

  • CMMN 引擎添加了计划项生命周期侦听器

  • 支持Duration 变量

版本6.4.1

  • 添加了一个新表act_hi_tsk_log来跟踪用户/人工任务发生的更改。(在任务的受让人、所有者或例如到期日期发生变化时创建。默认情况下,用户/人工任务日志记录是禁用的,enableHistoricTaskLogging 属性可以启用)

  • 添加了一个新的运行时和历史实体链接表来存储父实体和所有子实体之间的关系。

  • 添加了运行时活动实例表

  • 多租户改进支持在租户内查找流程、案例、表单和决策表定义

  • CMMN一系列更新

版本6.5.0

  • 添加新的事件注册引擎,提供在事件驱动架构中使用 Flowable 的功能,对 JMS、Apache Kafka 和 RabbitMQ 提供开箱即用的支持。(BPMN 开始事件、边界事件和可触发的发送事件任务可以接收事件。在 CMMN 中,事件侦听器支持接收事件并用于启动新的案例实例。)
  • 添加了使用锁来控制创建数据库和在启动时执行自动部署,确保当同时启动多个服务器/节点时,创建数据库模式和自动部署 CMMN XML 和 BPMN XML 文件等只会同时发生在一个服务器/节点上。
  • 添加了一个新的批处理服务以支持在一个批处理中执行多个作业,其中每个作业是一个批处理部分。Batch 服务的第一个用途是支持批处理流程实例迁移。
  • 添加事件注册表启动事件的支持,以使用传入事件触发启动流程实例,其他边界事件、发送事件支持。
  • 邮件任务得到了增强,支持将内容项作为附件发送。
  • CMMN和DMN相关增强

版本6.6.0

BPMN

  • 当重试用完时,历史作业现在移动到死信作业表。

  • 添加了对事件注册表支持的接收任务和中间捕获事件的支持。

  • 可以为信号事件定义输入和输出参数

  • 属于同一 Flowable 事务活动实例添加事务顺序值****

CMMN

  • 添加了对案例实例迁移的支持
  • Case 任务现在支持输入和输出参数映射。

DMN

  • DMN 引擎中添加了对决策服务和 DRD(决策需求图)的支持。

版本6.7.0

  • 实现了全局锁定机制,支持在具有多个 Flowable 引擎的设置中更好地使用异步执行器。同时异步执行器默认配置已更改为默认情况下每秒能够处理更多作业。

  • 添加对多实例变量聚合的支持。

  • 添加了对案例重新激活的支持,支持将历史和已完成的案例实例重新激活到正在运行的案例实例。

  • 添加了一个变量侦听器,以允许 BPMN 和 CMMN 模型侦听特定变量的更改并在模型中处理此触发器。

  • 添加对并行触发的 CMMN 引擎中的重复信号和通用事件侦听器的支持。

  • 添加了对 DMN 1.3 版本模型的支持。

  • 添加 JUEL/后端表达式中对方法重载的支持。

  • CMMN 引擎添加了基本的 CMMN 模型验证,添加了基本的 CDI 支持。

  • 改进了运行时和历史流程以及案例实例查询(包括变量)的分页。

  • 升级到 Spring Boot 2.5.4 和 Spring 5.3.9

微信公众号搜索 土豆仙
关注更多即时技术文章,整理原创不易,转载请标明出处。

image\