工作流引擎之Flowable

一、概述

Flowable是一个使用Java编写的轻量级业务流程引擎,专为处理复杂业务流程而设计。作为业务流程管理(BPM)领域的重要工具,Flowable不仅支持BPMN 2.0标准的流程定义,还提供了丰富的API接口和可视化工具,使得业务流程的设计、执行和管理变得更加高效和灵活。Flowable以其轻量级、易集成和高性能的特点,广泛应用于各类企业级应用中,成为推动业务流程自动化的关键力量。

Flowable源自Activiti,由原始Activiti核心开发团队创建和维护。Flowable继承了Activiti的许多特性,并在此基础上进行了进一步的开发和改进。与Activiti相比,Flowable在以下几个方面具有显著优势:社区活跃度更高,拥有丰富的资源和活跃的社区支持;功能更加完善,提供了更多的业务流程管理特性,如任务分配、事件处理、历史数据记录等;API接口和可视化工具更加友好和易用,降低了开发者的学习成本;支持自定义扩展和插件机制,满足企业的特殊需求。

Flowable的核心价值在于其能够为企业提供一个统一的、可扩展的业务流程管理平台,帮助企业实现业务流程的标准化、自动化和智能化。通过Flowable,企业可以轻松地定义和管理业务流程,提高业务运营效率,降低运营成本,同时增强业务的灵活性和响应速度。

二、核心组件

其核心组件主要包括以下几个方面:

1. 工作流引擎

* 核心引擎(Core Engine)

这是Flowable的核心组件,负责解析、执行和管理工作流程。它包含了流程定义的解析器、执行引擎、事务管理器和持久化层。核心引擎处理工作流程的执行状态、任务分配和流程控制逻辑。

* 引擎抽象层(Engine Abstraction)

提供了对核心引擎的抽象和封装,以便于与其他组件进行交互。

2. 服务组件

* RepositoryService

负责流程定义的存储和管理。它允许部署新的流程定义、查询已部署的流程定义、获取流程定义的资源等。

* RuntimeService

负责流程实例的运行时管理,包括启动、暂停、恢复和终止流程实例。它还提供了丰富的查询API来检索流程实例和相关数据。

* TaskService

负责任务的管理和查询。它可以创建任务、分配任务、查询任务、认领任务、完成任务等。

* HistoryService

负责历史流程数据的查询和分析。它可以查询流程实例、任务、变量、活动和步骤等的历史记录。

* IdentityService

负责用户和组的管理。它可以创建、更新、删除和查询用户和组的信息。

* ManagementService

提供了一些管理和监控流程引擎的API,如查询数据库表、修改流程参数、获取引擎信息等。

* FormService

用于渲染任务表单,并将表单提交到后台处理。它允许定义和渲染任务表单,以便用户在执行任务时填写必要的信息。

3. 事件处理

  • 事件(Event):是Flowable中的重要组件,用于触发和处理工作流程中的动作和决策。事件可以是内部的,由工作流引擎触发,也可以是外部的,通过监听外部系统的事件进行触发。Flowable提供了事件监听器和触发器,以便对事件进行响应和处理。

4. 流程监听器

  • 流程监听器在Flowable中用于监听各种事件,以便在事件发生时执行一些自定义逻辑。它们可以通过API或流程定义文件(BPMN XML)进行配置,并与各种事件关联。常见的流程监听器类型包括ExecutionListener(用于监听流程实例和执行实例的生命周期事件)、TaskListener(用于监听任务的生命周期事件)、VariableListener(用于监听流程变量的创建、更新和删除等事件)、EventListener(用于监听信号、消息和定时器等事件)等。

5. 配置与部署

  • 配置流程引擎:在配置文件中,可以配置数据库连接信息、流程定义文件的位置等信息。Flowable支持多种数据库,如MySQL、PostgreSQL等。
  • 部署流程定义:将BPMN 2.0格式的流程定义文件部署到Flowable中,可以使用Flowable的API或命令行工具进行部署。部署完成后,Flowable将解析流程定义并生成相应的执行模型。

三、版本演进

Flowable是一个基于Java的开源工作流引擎,用于开发工作流和业务流程。自2016年10月由Activiti的核心开发者Tijs Rademakers从Activiti 5.22版本分支基础上创建以来,Flowable经历了多个版本的迭代,不断完善其功能和性能。以下是Flowable主要版本的演进介绍:

1、早期版本

- Flowable 5.22.0

  • 发布时间:2016年10月13日
  • 主要特点:作为Flowable项目的首个版本,基于Activiti 5.22分支创建。

- Flowable 6.0.0

  • 发布时间:2017年2月15日

  • 主要特点:

    • 基于Activiti 6构建,并修复了多个bug。
    • 引入了决策模型与符号(DMN)支持。
    • 提供了业务流程模型与符号(BPMN)引擎、案例管理模型与符号(CMMN)引擎等核心模块。

2、成熟版本

- Flowable 6.4.1

  • 主要特点:

    • 以该版本为分水岭,Flowable开始大力发展其商业版产品。
    • 开源版本的部分功能(如表单生成器、历史数据同步至其他数据源等)不再在开源版中发布。

- Flowable 6.7.0

  • 发布时间:2021年12月28日

  • 主要特点:

    • 增加了对MongoDB持久化的支持。
    • 引入了新的运行时和历史实体链接表,用于存储父实体和所有子实体之间的关系。
    • 添加了多租户改进,支持在租户内查找流程、案例、表单和决策表定义。

- Flowable 6.8.0

  • 发布时间:2022 年 12 月 23 日

  • 主要特点:

    • 增加了与Spring Boot 2.4.x集成的能力。
    • 更新了CMMN引擎以支持CMMN 1.1规范。
    • 引入了批量完成任务的API。
    • 提供了获取流程定义最后一次部署信息的API。
    • 增加了对BPMN模型XML中用户任务表单字段信息的API支持。

3、重大更新版本

- Flowable 7.0.0

  • 发布时间:2023年9月21日

  • 主要特点:

    • 作为Flowable引擎的第一个稳定版本,专注于Spring Boot 3、Spring 6和Java 17的升级。
    • 引入了全新的架构,移除了UI应用程序、内容和表单引擎等模块,更加专注于BPMN、CMMN、DMN和事件注册引擎的核心功能。
    • 支持CMMN案例的批量迁移和案例重新激活的重复执行。
    • 提供了HTTP任务对HEAD和OPTIONS方法的支持。
    • 引入了Flowable BOM(Bill of Materials),方便管理Flowable项目的依赖。

4、近期版本

- Flowable 7.x后续版本

  • 发布时间:2024年及以后(持续更新中)

  • 主要特点:

    • 在7.0.0版本的基础上,继续修复bug,优化性能,并可能引入新的功能和改进。
    • 保持对最新技术和框架的支持,如Spring Boot、Java等。

5、版本兼容性

- Flowable 6.x系列

  • 各版本之间通常具有较好的兼容性,升级时无需担心兼容性问题。

- Flowable 7.0.0

  • 与Flowable 6.x版本不兼容,升级时需要进行详细的测试和评估。

四、Flowable的应用场景

Flowable的应用场景非常广泛,可以应用于各种业务领域中,包括但不限于:

1. 业务审批

  • 如请假申请、费用报销、合同审批等。在这些场景中,Flowable可以定义复杂的审批流程,包括多个审批节点、条件分支、并行审批等。例如,一个请假流程可能包括员工提交请假申请、部门主管审批、人事部门备案等步骤。Flowable可以自动创建请假流程实例,并根据流程定义中的规则和逻辑将任务分配给相应的审批人员。审批人员可以在Flowable提供的可视化界面中查看待审批的任务,并进行审批操作。

2. 生产制造

  • 如订单处理、生产调度、质量控制等。在这些场景中,Flowable可以协调各个生产环节,确保生产过程的顺利进行。例如,一个订单处理流程可能包括接收订单、分配生产任务、生产执行、质量检查、发货等步骤。Flowable可以监控和管理整个生产流程,确保各个环节之间的顺畅衔接。

3. 客户服务

  • 如客户投诉处理、服务请求跟踪等。在这些场景中,Flowable可以记录客户的投诉或服务请求,并将其分配给相应的客服人员进行处理。客服人员可以在Flowable提供的界面中查看待处理的服务请求,并进行跟踪和处理。

4. 项目管理

  • 如项目计划、任务分配、进度跟踪等。在这些场景中,Flowable可以帮助项目经理制定项目计划,分配任务,并跟踪项目进度。项目经理可以在Flowable提供的界面中查看项目的整体情况,了解各个任务的执行状态和进度。

5. 供应链管理

  • 如采购管理、库存管理、物流配送等。在这些场景中,Flowable可以协调供应链各个环节之间的协作,确保供应链的高效运行。例如,一个采购流程可能包括提交采购申请、审批采购申请、下达采购订单、接收货物、入库等步骤。Flowable可以自动管理整个采购流程,确保各个环节之间的顺畅衔接。

五、代码示例

以下是一个简单的Java代码示例,说明如何使用Flowable API来部署一个BPMN 2.0流程定义,并启动一个流程实例。

import org.flowable.engine.ProcessEngine;
import org.flowable.engine.ProcessEngines;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.repository.Deployment;

public class FlowableDemo {

    public static void main(String[] args) {
        // 默认情况下,Flowable 会查找 classpath 下的 flowable.cfg.xml 配置文件来创建 ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        // 获取 RepositoryService 用于部署流程定义
        RepositoryService repositoryService = processEngine.getRepositoryService();

        // 部署流程定义,通常从文件、输入流或字符串中读取 BPMN 2.0 XML
        // 这里假设您有一个名为 "my-process.bpmn20.xml" 的 BPMN 文件在 classpath 下
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("my-process.bpmn20.xml")
                .deploy();

        System.out.println("Deployment ID: " + deployment.getId());

        // 获取 RuntimeService 用于启动流程实例
        RuntimeService runtimeService = processEngine.getRuntimeService();

        // 启动流程实例,这里假设流程定义的 key 是 "myProcess"
        // 您可以根据需要传递流程变量
        runtimeService.startProcessInstanceByKey("myProcess");

        System.out.println("Process instance started");

        // 注意:这里只是启动了流程实例,并没有处理流程中的用户任务或等待状态。
        // 在实际应用中,您需要根据流程定义中的逻辑来处理这些任务或状态。
    }
}

六、总结

Flowable是一个功能强大且易于集成的轻量级业务流程引擎,它支持BPMN 2.0标准,提供了丰富的API接口和可视化工具,使得业务流程的设计、执行和管理变得更加高效和灵活。Flowable的核心组件包括工作流引擎、服务组件、事件处理、流程监听器等,它们共同协作以支持复杂业务流程的执行和管理。

Flowable的应用场景非常广泛,可以应用于各种业务领域中,如业务审批、生产制造、客户服务、项目管理、供应链管理等。通过Flowable,企业可以轻松地定义和管理业务流程,提高业务运营效率,降低运营成本,同时增强业务的灵活性和响应速度。

在实际应用中,开发者可以通过Flowable提供的REST API或可视化界面与Flowable进行交互,创建、查询和管理业务流程。Flowable还提供了丰富的社区支持和资源,如官方网站、GitHub仓库、社区论坛等,帮助开发者更好地理解和使用Flowable。

随着企业数字化转型的加速推进,业务流程自动化和智能化管理将成为未来的重要趋势。Flowable凭借其轻量级、易集成和高性能的特点,将在这一领域发挥越来越重要的作用。未来,Flowable将继续保持其技术领先性,不断推出新功能和更新,以满足企业日益增长的业务流程管理需求。同时,Flowable也将积极与云计算、大数据、人工智能等新技术进行融合创新,为企业提供更加全面、高效的业务流程管理解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/944188.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过 Ansys Electronics Desktop 中的高级仿真优化 IC 设计

半导体行业继续通过日益复杂的集成电路 (IC) 设计突破技术界限。随着工艺节点缩小和电路密度达到前所未有的水平,电磁效应对设备性能和可靠性变得越来越重要。现代 IC 设计面临着来自复杂的布局相关耦合机制、信号完整性问题和功率分布问题的挑战,这些问…

Yocto 项目中的交叉编译:原理与实例

Yocto 项目是一个强大的工具集,它专注于为嵌入式系统生成定制的 Linux 发行版。交叉编译在 Yocto 项目中扮演着核心角色,它使得开发者能够在功能强大的宿主机上构建适用于资源受限目标设备的软件系统。这篇文章将从运行原理、实际案例和工具链组成等角度…

WPF 绘制过顶点的圆滑曲线(样条,贝塞尔)

项目中要用到样条曲线,必须过顶点,圆滑后还不能太走样,捣鼓一番,发现里面颇有玄机,于是把我多方抄来改造的方法发出来,方便新手: 如上图,看代码吧: -------------------…

谷粒商城-高级篇-秒杀业务

1、后台添加秒杀商品 1、配置网关 - id: coupon_routeuri: lb://gulimall-couponpredicates:- Path/api/coupon/**filters:- RewritePath/api/(?<segment>.*),/$\{segment} 2、每日秒杀关联商品功能实现 点击关联商品后&#xff0c;应该查询当前场次的所有商品 点击关…

JuOne核心模块揭秘:从智能硬件到Web3生态的完美连接

JuOne核心模块揭秘&#xff1a;从智能硬件到Web3生态的完美连接在全球数字经济的浪潮中&#xff0c;Web3 正以前所未有的速度重塑我们的生活方式、商业模式和价值创造体系。它不仅仅是互联网的下一阶段&#xff0c;更是一场关于未来的革命。去中心化、用户主权、价值互联&#…

Kafka高性能设计

高性能设计概述 Kafka高性能是多方面协同的结果&#xff0c;包括集群架构、分布式存储、ISR数据同步及高效利用磁盘和操作系统特性等。主要体现在消息分区、顺序读写、页缓存、零拷贝、消息压缩和分批发送六个方面。 消息分区 存储不受单台服务器限制&#xff0c;能处理更多数据…

若依框架之简历pdf文档预览功能

一、前端 &#xff08;1&#xff09;安装插件vue-pdf&#xff1a;npm install vue-pdf &#xff08;2&#xff09;引入方式&#xff1a;import pdf from "vue-pdf"; &#xff08;3&#xff09;components注入方式&#xff1a;components:{pdf} &#xff08;4&…

【社区投稿】自动特征auto trait的扩散规则

自动特征auto trait的扩散规则 公式化地概括&#xff0c;auto trait marker trait derived trait。其中&#xff0c;等号右侧的marker与derived是在Rustonomicon书中的引入的概念&#xff0c;鲜见于Rust References。所以&#xff0c;若略感生僻&#xff0c;不奇怪。 marker …

Elasticsearch检索之三:官方推荐方案search_after检索实现(golang)

Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一&#xff1a;使用fromsize实现分页 快速掌握Elasticsearch检索之二&#xff1a;滚动查询(scrool)获取全量数据(golang) 1、search_after检索 在前面的文章介绍了fromsize的普通分页…

精读DeepSeek v3技术文档的心得感悟

最近宋大宝同学读完了DeepSeekv3的文档&#xff0c;心中颇多感慨&#xff0c;忍不住想在这里记录一下对这款“业界有望启示未来低精度训练走向”的开源大模型的观察与思考。DeepSeek v3的亮点绝不仅仅是“Float8”或“超长上下文”这么简单&#xff0c;而是贯穿了从数值精度、注…

WAV文件双轨PCM格式详细说明及C语言解析示例

WAV文件双轨PCM格式详细说明及C语言解析示例 一、WAV文件双轨PCM格式详细说明1. WAV文件基本结构2. PCM编码方式3. 双轨PCM格式详细说明二、C语言解析WAV文件的代码示例代码说明一、WAV文件双轨PCM格式详细说明 WAV文件是一种用于存储未压缩音频数据的文件格式,广泛应用于音频…

Day1 微服务 单体架构、微服务架构、微服务拆分、服务远程调用、服务注册和发现Nacos、OpenFeign

目录 1.导入单体架构项目 1.1 安装mysql 1.2 后端 1.3 前端 2.微服务 2.1 单体架构 2.2 微服务 2.3 SpringCloud 3.微服务拆分 3.1 服务拆分原则 3.1.1 什么时候拆 3.1.2 怎么拆 3.2 拆分购物车、商品服务 3.2.1 商品服务 3.2.2 购物车服务 3.3 服务调用 3.3.1 RestTemplate 3.…

DeepSpeed 使用 LoRA 训练后文件结构详解

DeepSpeed 使用 LoRA 训练后文件结构详解 在大语言模型&#xff08;LLM&#xff09;的训练过程中&#xff0c;DeepSpeed 提供了强大的分布式训练能力&#xff0c;而 LoRA&#xff08;Low-Rank Adaptation&#xff09;通过参数高效微调技术显著减少了资源占用。完成训练后&…

Llama 3 预训练(二)

目录 3. 预训练 3.1 预训练数据 3.1.1 网络数据筛选 PII 和安全过滤 文本提取与清理 去重&#xff08;De-duplication&#xff09; 启发式过滤&#xff08;Heuristic Filtering&#xff09; 基于模型的质量过滤 代码和数学推理数据处理 多语言数据处理 3.1.2 确定数…

Autoware Universe 安装记录

前提&#xff1a; ubuntu20.04&#xff0c;英伟达显卡。 ROS2-Galactic安装 wget http://fishros.com/install -O fishros && . fishros 选择galactic(ROS2)版本&#xff0c;桌面版 ROS2-dev-tools安装 sudo apt install python3-testresources sudo apt update …

【小程序】自定义组件的data、methods、properties

目录 自定义组件 - 数据、方法和属性 1. data 数据 2. methods 方法 3. properties 属性 4. data 和 properties 的区别 5. 使用 setData 修改 properties 的值 自定义组件 - 数据、方法和属性 1. data 数据 在小程序组件中&#xff0c;用于组件模板渲染的私有数据&…

socket编程(C++/Windows)

相关文章推荐&#xff1a; Socket 编程基础 面试官&#xff0c;不要再问我三次握手和四次挥手 TCP的三次握手与四次挥手 参考视频&#xff1a; https://www.bilibili.com/video/BV1aW4y1w7Ui/?spm_id_from333.337.search-card.all.click TCP通信流程 服务端 #include<…

linux自动化一键批量检查主机端口

1、准备 我们可以使用下面命令关闭一个端口 sudo iptables -A INPUT -p tcp --dport 端口号 -j DROP我关闭的是22端口&#xff0c;各位可以关其它的或者打开其它端口测试&#xff0c;谨慎关闭22端口&#xff01;不然就会像我下面一样握手超时&#x1f62d;&#x1f62d;&…

实验五 时序逻辑电路部件实验

一、实验目的 熟悉常用的时序逻辑电路功能部件&#xff0c;掌握计数器、了解寄存器的功能。 二、实验所用器件和仪表 1、双 D触发器 74LS74 2片 2、74LS162 1片 3、74194 1片 4、LH-D4实验仪 1台 1.双…

开源轻量级文件分享服务Go File本地Docker部署与远程访问

???欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…