type
status
date
slug
summary
tags
category
icon
password
Property
May 5, 2023 03:12 AM
Flowable的流程引擎ProgressEngine是整个Flowable应用中的关键,无论是从架构角度去审视ProgressEngine的位置,还是从业务角度去衡量他的作用,毋庸置疑的是,所有关于流程的操作,都是建立在ProgressEngine基础之上!学习Flowable,先学Engine!
在Flowable中,流程的实现是依托于各个组件的相互依赖、组合而成的。ProcessEngine流程引擎是纵观整个Flowable应用的关键。通过构建ProcessEngine,我们可以从中拿到History的服务,Management服务,Repository服务,Form服务,Identity服务,Runtime服务以及Task服务。因此对于Flowable中的Engine,我们需要详细地去了解学习。本文会将Flowable的Engine的学习记录分几个部分作为讲解,由浅入深,全面的学习并掌握Flowable的Engine组件。
一、构建ProcessEngine
常规方法:参数填充
构建一个ProcessEngine,我们肯定不会避开配置,关于Flowable的配置,有很多种,但在实际开发中,我们一般常用声明式编程的方式进行配置,结合Spring的解析,我们可以依托于SpringCloud组件Nacos构建配置中心,以编程的方式去加载读取配置中心中Flowable的配置,进而通过填补ProcessEngine的配置类信息,来构建ProcessEngine。
在Flowable6.7.2中,Engine的构建来自于ProcessEngineConfiguration这个类,我们来看一下这类的具体情况:
当前版本6.7.2下这个类的实现结构图如下图所示:
但在Flowable6.5之前,ProcessEngine的配置类:ProcessEngineConfiguration的生态结构如下图所示:
通过比较可以发现,在6.7.2中,flowable删除了关于Spring的配置类,新增了一个多引擎多系统配置类,从而达到一个配置类,以制定路由规则的方式支持多个数据库操作,这个场景用于多租户的情况。(租户也是一种互联网架构,这种技术后面会有一篇专题来解释说明)接下来我们重点关注一下6.7.2版本中的五个配置类:
配置类详情
类名
作用
应用场景
流程引擎以独立的方式使用。Flowable 将处理所有交易。默认情况下,只会在引擎启动时检查数据库(如果没有 Flowable 架构或架构版本不正确,则会引发异常)。
-
这是一个用于单元测试的便利类。Flowable 将处理所有交易。默认使用 H2 内存数据库。当引擎启动和关闭时,将创建和删除数据库。使用它时,可能不需要额外的配置(例如,使用作业执行器或邮件功能时除外)。
-
如果我们想自定义一个ProcessEngineConfiguration抽象类可以选择继承ProcessEngineConfiguration或者它的直接子类ProcessEngineConfigurationImpl,继承ProcessEngineConfigurationImpl需要实现getDefaultCommandInterceptorsTxRequired和getDefaultCommandInterceptorsTxRequiresNew方法。如果需要添加自定义属性,可以为自己的ProcessEngineConfiguration类添加属性,并且添加相应的setter方法。
自定义配置
所以对于我们日常使用而言,没有必要去对底层的细节掌握的炉火纯青,除非自己去构建一个流程应用,或者是改写流程。但是如果是自定义定制个性化的流程,那么对于ProcessEngineConfiguration的直接子类:ProcessEngineConfigurationImpl需要深入去了解一番。我们只需要关心创建流程的几种常用的方式就可以了。需要注意的是:所有这些 ProcessEngineConfiguration.createXXX() 方法都返回一个 ProcessEngineConfiguration ,如果需要可以进一步调整。调用 buildProcessEngine() 操作后,会创建一个 ProcessEngine,这种模式源自于Java的构建者模式:
快速创建:默认规范
而对于只是想快速体验的同学来说,有更直接的方式来创建ProcessEngine:
快速创建:依赖注入(XML方式)
通过构建ProcessEngineConfiguration的Bean进行依赖属性的注入也是一种快速构建ProcessEngine的方式。这种方式依赖于一个Spring的bean配置文件,也就是Spring的applicationContext.xml,在flowable应用中,一般名字为:flowable.cfg.xml ,文件名都不是重点,重点是必须包含一个 id为“processEngineConfiguration”的 bean。
然后使用这个 bean 来构造 ProcessEngine。有多个类可用于定义 processEngineConfiguration。这些类代表不同的环境,并相应地设置默认值。最佳实践是选择与您的环境最匹配的类,以尽量减少配置引擎所需的属性数量。上文中也已经提及了这些类的具体用处以及使用场景,这里就不过多赘述。
二、ProcessEngine核心
api.services
ProcessEngine,引擎 API 是与 Flowable 交互的最常见方式。主要起点是 ProcessEngine,它可以通过配置部分中描述的多种方式创建。您可以从 ProcessEngine 获取包含工作流/BPM 方法的各种服务。ProcessEngine 和服务对象是线程安全的,因此您可以为整个服务器保留对其中之一的引用。
image-20220822112304068
ProcessEngines.getDefaultProcessEngine() 将在第一次调用时初始化并构建流程引擎,然后始终返回相同的流程引擎。可以使用 ProcessEngines.init() 和 ProcessEngines.destroy() 正确创建和关闭所有流程引擎。
ProcessEngines 类将扫描所有 flowable.cfg.xml 和 flowable-context.xml 文件。对于所有 flowable.cfg.xml 文件,流程引擎将以典型的 Flowable 方式构建:ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream).buildProcessEngine()。对于所有 flowable-context.xml 文件,流程引擎将以 Spring 方式构建:首先创建 Spring 应用程序上下文,然后从该应用程序上下文中获取流程引擎。
所有服务都是无状态的。这意味着您可以轻松地在集群中的多个节点上运行 Flowable,每个节点都访问同一个数据库,而不必担心哪台机器实际执行了先前的调用。无论在何处执行,对任何服务的任何调用都是幂等的。
未完待续….
- 作者:fntp
- 链接:https://polofox.com/article/flowable-progessEngine-1
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章