首页 > 其他分享 >初识 Flowable

初识 Flowable

时间:2023-07-12 15:01:19浏览次数:34  
标签:定义 实例 Flowable 流程 初识 引擎 ACT

Flowable 是一款开源的简化业务流程的设计和执行的工作流框架。它提供了一套功能强大且灵活的工具,帮助开发人员实现工作流程的定义、执行和监控,从而提高组织的效率和灵活性。

Flowable 是一个用 Java 编写的轻量级业务流程引擎,允许部署 BPMN 2.0 流程定义(用于定义流程的行业 XML 标准)、创建这些流程定义的流程实例、查询、访问活动或历史流程实例及相关数据等等。

特性

  • 可视化建模:Flowable 提供了一个直观易用的图形化建模工具,使开发人员能够以可视化的方式设计和定义业务流程。通过拖放和连接各种任务和决策节点,你可以轻松创建复杂的工作流程,并指定每个步骤的执行逻辑和条件。
  • 强大的执行引擎:Flowable 的执行引擎是其核心组件之一,它负责实际执行定义好的业务流程。引擎支持并行和顺序执行,能够自动处理任务分配、决策路由、事件触发等操作。
  • 灵活的扩展性:Flowable 的架构设计非常灵活,可以方便地扩展和集成到现有的系统中。我们可以通过自定义任务和事件监听器、添加自定义的表单和表达式等方式,根据特定的业务需求进行定制化开发。
  • 实时监控和报告:Flowable 提供了丰富的监控和报告功能,使我们能够实时跟踪业务流程的执行情况和性能指标。我们可以查看流程实例的状态、任务的进度、执行时间等信息,并生成可视化的报表和图表进行分析和决策。

应用场景

Flowable 在许多领域都具有广泛的应用场景,特别是那些需要复杂业务流程管理的领域:

  1. 工作流自动化:Flowable 可用于自动化各种业务流程,如订单处理、审批流程、合同管理等。它可以减少人工干预和错误,提高流程的效率和一致性。
  2. 企业资源规划(ERP):Flowable 可以与 ERP 系统集成,帮助企业管理和优化复杂的供应链、采购和生产流程。
  3. 客户关系管理(CRM):Flowable 能够协调和跟踪销售流程、客户服务请求等 CRM 活动,提供更好的客户体验和管理。
  4. 跨部门协作:Flowable 可以帮助不同部门之间协调和协作,确保工作流程的顺畅和及时执行。

Flowable 架构

Flowable 采用了分层架构,将其功能划分为不同的模块和组件。下面是 Flowable 的架构概述:

  1. 核心引擎(Core Engine):核心引擎是 Flowable 的核心组件,负责解析、执行和管理工作流程。它包含了流程定义的解析器、执行引擎、事务管理器和持久化层。核心引擎处理工作流程的执行状态、任务分配和流程控制逻辑。
  2. 引擎抽象层(Engine Abstraction):引擎抽象层提供了对核心引擎的抽象和封装,以便于与其他组件进行交互。它定义了流程定义、流程实例、任务和执行等概念,并提供了相应的 API 和服务接口。
  3. 命令层(Command Layer):命令层是 Flowable 的上层接口,用于封装和执行各种操作命令。它提供了一组高级命令,用于启动流程实例、处理任务、查询流程状态等操作。命令层隐藏了底层引擎的复杂性,简化了与 Flowable 的交互。
  4. 服务层(Service Layer):服务层建立在命令层之上,提供了更高级别的服务接口。它封装了常见的业务场景和操作,例如流程部署、用户认证、任务管理和事件处理。服务层通过提供简化的 API,使开发人员能够更方便地使用 Flowable 进行工作流开发。
  5. 可视化和建模层(Visualization and Modeling Layer):Flowable 提供了可视化建模工具,用于设计和编辑 BPMN 2.0 流程定义。这个层次提供了一个图形界面,使用户能够直观地定义和编辑流程模型,而无需手动编写XML文件。
  6. 扩展模块(Extension Modules):Flowable 还提供了一系列的扩展模块,用于增强和扩展其功能。这些模块包括与外部系统的集成模块、表单引擎、规则引擎、REST API 等。用户可以根据需要选择并集成这些模块,以满足特定的业务需求。

Flowable 的架构设计具有模块化和可扩展的特点,允许用户根据具体需求选择所需的功能组件,并进行定制和扩展。这使得 Flowable 能够适应不同规模和复杂度的工作流程应用场景。

核心组件

Flowable 的核心组件是基于工作流引擎的一套模块化构架。以下是 Flowable 的核心组件:

  1. Engine(引擎):Flowable 引擎是 Flowable 的核心组件,负责解析、执行和管理工作流程。它提供了一组 API 和服务,用于启动和控制工作流实例,处理任务分配和执行,管理事件和条件,以及监控和报告工作流的状态和性能。
  2. Process Definition(流程定义):流程定义是 Flowable 工作流的基本元素,描述了工作流程的结构、步骤和关系。它是基于 BPMN 2.0 标准定义的,可以使用 Flowable 提供的可视化建模工具或手动编写 XML 文件进行定义。流程定义包括各种任务、网关、事件和条件等元素,以及它们之间的连线和流程控制逻辑。
  3. Process Instance(流程实例):流程实例是基于流程定义创建的实体,代表了具体的工作流程执行过程。每个流程实例都有独立的执行状态和数据上下文,根据定义的流程控制逻辑进行执行。引擎负责创建、启动、暂停、恢复和终止流程实例,并处理其生命周期中的各个阶段。
  4. Task(任务):任务是工作流中的工作单元,代表需要执行的具体工作或待办事项。每个任务都与特定的流程实例相关联,并分配给相应的参与者或角色。Flowable 引擎负责任务的分配、执行和跟踪,可以处理任务状态、指派、完成以及任务间的依赖关系。
  5. Event(事件):事件是 Flowable 中的重要组件,用于触发和处理工作流程中的动作和决策。事件可以是内部的,由工作流引擎触发,也可以是外部的,通过监听外部系统的事件进行触发。Flowable 提供了事件监听器和触发器,以便对事件进行响应和处理。
  6. Monitoring and Reporting(监控和报告):Flowable 提供了丰富的监控和报告功能,帮助用户实时跟踪工作流程的执行情况和性能指标。用户可以查看流程实例的状态、任务的进度、已完成的步骤等信息,并生成报告和图表进行分析和决策。

执行流程

  1. 流程定义:首先,需要定义工作流程的流程定义。这可以通过 Flowable 提供的可视化建模工具或手动编写 BPMN 2.0 的 XML 文件来完成。流程定义描述了工作流程的结构、步骤和控制逻辑。
  2. 流程部署:将定义好的流程定义部署到 Flowable 引擎中。这会将流程定义持久化到引擎的数据库中,并使其可供引擎使用。
  3. 流程实例化:当需要启动一个具体的工作流程实例时,可以通过 Flowable 引擎创建流程实例。创建流程实例时,引擎会根据流程定义的结构和初始条件实例化流程,并将其纳入执行状态。
  4. 任务执行:引擎会根据流程定义中的控制逻辑,将任务分配给相应的参与者或角色。任务的分配可以基于角色、组织结构或其他条件进行自动路由。被分配的任务将出现在参与者的待办事项列表中。
  5. 任务处理:参与者执行被分配的任务,并根据任务要求进行相应的操作。这可能涉及与其他系统的交互、填写表单、上传文件等。在任务执行过程中,可以通过 Flowable 引擎的 API 和服务与引擎进行交互,更新任务状态和数据。
  6. 任务完成:当任务的执行完成时,参与者将任务标记为完成。完成任务后,引擎会根据流程定义中的控制逻辑决定下一个要执行的任务。
  7. 分支和合并:在工作流程中,可能存在条件分支和并行执行的情况。Flowable 引擎能够根据流程定义中的条件和网关节点,自动选择适当的分支和合并执行。
  8. 事件触发:Flowable 引擎支持事件驱动的工作流程。它可以监听外部事件或内部信号,并根据触发的事件执行相应的操作。这使得工作流程能够与其他系统进行集成和交互。
  9. 监控和报告:Flowable 提供了监控和报告功能,以便用户实时跟踪工作流程的执行情况和性能指标。用户可以查看流程实例的状态、任务的进展、已完成的步骤等信息,并生成报告和图表进行分析和决策。

服务

Flowable 提供了一系列的服务来支持工作流程的管理和执行。以下是 Flowable 提供的一些主要服务:

  1. 流程引擎服务(Process Engine Service):Flowable 提供了流程引擎服务,用于创建和管理流程引擎实例。流程引擎是 Flowable 的核心组件,负责解析、执行和管理工作流程。
  2. 流程定义服务(Process Definition Service):该服务提供了操作流程定义的功能,包括流程定义的部署、查询、暂停和激活等。通过该服务,可以管理流程定义的生命周期。
  3. 流程实例服务(Process Instance Service):流程实例服务允许创建、查询和管理流程实例。通过该服务,可以启动新的流程实例,查询已经运行的实例,并对实例进行暂停、激活和终止等操作。
  4. 任务服务(Task Service):任务服务提供了与任务相关的功能。通过该服务,可以查询和管理任务,包括任务的创建、分配、完成、委派和转办等操作。
  5. 历史数据服务(Historic Data Service):Flowable 还提供了历史数据服务,用于查询和分析已完成的流程实例和任务的历史数据。通过该服务,可以获取流程实例的执行轨迹、任务的处理时间和执行者等信息。
  6. 表单服务(Form Service):Flowable 提供了表单服务,用于创建和管理与任务相关的表单。该服务允许定义表单字段、表单验证规则,并与任务的处理过程进行交互。
  7. 身份认证和授权服务(Identity and Authorization Service):Flowable 提供了身份认证和授权服务,用于管理用户、角色和权限。通过该服务,可以定义和管理用户的访问权限,以及角色和用户之间的关联关系。
  8. 定时任务服务(Timer Job Service):Flowable 支持定时任务的执行和管理。通过该服务,可以创建和管理定时任务,定义任务的触发条件和执行逻辑。
  9. 事件监听服务(Event Listener Service):Flowable 提供了事件监听服务,用于监听和处理与流程相关的事件。通过该服务,可以注册事件监听器,对流程引擎的事件进行处理和响应。

这些服务为开发人员提供了丰富的功能和 API,用于构建、管理和扩展工作流程应用。通过使用这些服务,可以实现工作流程的灵活控制、任务分配和监控等功能。

表结构

Flowable 使用关系型数据库存储其流程定义、流程实例、任务和历史数据等信息。Flowable 的表结构由一系列的数据库表组成,它们都以 ACT_ 开头,第二部分标识表的用途。以下是 Flowable 的常见表及其简要描述:

  1. ACT_GE_:GE 代表 General(全局),全局数据。
  2. ACT_RE_:RE 表示 Repository。带有这个前缀的表包含“静态”信息,例如流程定义与流程资源(图片)。
  3. ACT_RU_:RU 表示 Runtime。这些表存储运行时信息,例如流程实例(process instance)、用户任务(user task)、变量(variable)、作业(job)等。Flowable 只在流程实例运行中保存运行时数据,并在流程实例结束时删除记录。这样保证运行时表小和快。
  4. ACT_HI_:HI 表示 History。这些表存储历史数据,例如已完成的流程实例、变量、任务等。
  5. ACT_ID_:ID 表示 Identity。这些表存储用户相关信息。
类型 表名 说明
General ACT_GE_BYTEARRAY 存储流程定义的字节码数据,包括 BPMN 文件和其他相关资源。
ACT_GE_PROPERTY 存储全局属性,用于存储引擎的配置和运行时状态。
Repository ACT_RE_DEPLOYMENT 存储流程定义的部署信息,每次部署都会生成一条记录。
ACT_RE_PROCDEF 存储流程定义的元数据信息,包括流程定义的ID、名称、版本等。
ACT_RE_MODEL 存储流程模板相关描述信息。
Runtime ACT_RU_TASK 存储任务的运行时数据,包括任务的ID、负责人、创建时间等。
ACT_RU_EXECUTION 存储流程实例的运行时数据,包括当前活动节点、流程变量等。
ACT_RU_IDENTITYLINK 存储运行时流程人员信息,常用于查询人员或部门的待办任务。
ACT_RU_JOB 存储作业(Job)的数据,用于异步执行定时任务等。
ACT_RU_VARIABLE 存储流程实例和任务的变量数据。
ACT_RU_EVENT_SUBSCR 监听信息表。
History ACT_HI_ACTINST 存储已完成的流程活动(节点)的历史数据,包括活动的类型、开始时间、结束时间等。
ACT_HI_PROCINST 存储已完成的流程实例的历史数据,包括流程实例的开始时间、结束时间等。
ACT_HI_TASKINST 存储已完成的任务的历史数据,包括任务的完成时间、处理人等。
ACT_HI_VARINST 存储已完成的变量的历史数据。
ACT_HI_DETAIL 存储已完成的流程实例和任务的详细变量数据。
ACT_HI_COMMENT 存储已完成的审批意见的历史数据。
ACT_HI_ATTACHMENT 存储已完成的历史附件。
ACT_HI_IDENTITYLINK 存储已完成的参与者历史数据,包括各节点候选、办理人员信息,常用于查询某人或部门的已办任务。
Identity ACT_ID_GROUP 存储用户组信息,包括用户组的ID、名称等。
ACT_ID_INFO 存储用户扩展信息。
ACT_ID_MEMBERSHIP 存储用户与用户组之间的关联关系。
ACT_ID_USER 存储用户信息,包括用户的ID、用户名、密码等。

总结

Flowable 是一款功能强大且灵活的开源工作流框架,通过可视化建模、强大的执行引擎和灵活的扩展性,帮助企业简化和优化业务流程的设计和执行。它的实时监控和报告功能使你能够实时了解流程的状态和性能,进一步提高业务决策的准确性和效率。

项目实战

基于 Spring Boot 2.7.12、MyBatis-Plus、Spring Security、Flowable 等主流技术栈构建的后台管理系统:

Gitee GitHub
后端 https://gitee.com/linjiabin100/pi-admin.git https://github.com/zengpi/pi-admin.git
前端 https://gitee.com/linjiabin100/pi-admin-web.git https://github.com/zengpi/pi-admin-web.git

标签:定义,实例,Flowable,流程,初识,引擎,ACT
From: https://www.cnblogs.com/zn-pi/p/17547498.html

相关文章

  • 初识虚拟机JVM
    初识JVM(JAVAVirtualMachine)​ JVM是一种规范,可以使用软件来实现,也可以使用硬件来实现,就是一个虚拟的用于执行bytecodes字节码的计算机。他也定义了指令集、寄存器集、结构栈、垃圾收集堆、内存区域。​ JVM负责将java字节码解释运行,边解释边运行,这样,速度就会受到一定的影......
  • Java语言初识
    Java语言入门Java的特性和优势简单性:就是c++语法的纯净版。没有头文件,指针运算,结构,联合,操作符重载,虚基类等等。由于语法基于c,因此学习起来完全不费力。面向对象:面向对象是一种程序设计技术,他将重点放在数据(即对象)和对象之间的接口上。模拟人的思维写程序,万物皆对象!可移植......
  • redis初识笔记
    1.连接redis:在redis的某个节点机器上cd到redis_cluster目录,执行./redis-cli-h10.174.65.236 -c-p6381 2.查看所有key:keys*3.查看某个key的命令A.普通key:getkeynameB.map类似的keyHGETALLmapname[二级keyname]......
  • HIVE sql 初识笔记
    一、sql1.向hive里的某张表添加数据loaddatalocalinpath'/home/ocdp/hfb/sex.txt'OVERWRITEintotableTD_NP_ENUM_COC_BATCH1_DAY_COLUMN_013;2.查询select*fromTD_NP_ENUM_COC_BATCH1_DAY_COLUMN_013ast;3.清空表truncatetableTD_NP_ENUM_COC_BATCH1_DAY_C......
  • 初识 sed 和 gawk
    初识sed和gawk原创 饺子泡牛奶 饺子泡牛奶 2023-07-0108:40 发表于四川收录于合集#Linux与Shell18个本章内容:文本处理学习 sed 编辑器sed 编辑器基础命令gawk 编辑器入门sed 编辑器基础一、文本处理如果想在shell脚本中处理各种数据,则必须熟......
  • flink初识
    一、flink:apache开源的一款流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。此外,Flink的运行时本身也支持迭代算法的执行。二、Flink是一个计算框架......
  • 初识html[230706]
    基础认知目标:认识网页组成、浏览器、web标准概念铺垫网页有哪些部分组成?文字图片视频音频超链接背后本质是什么?前端程序员、工程师的代码代码是通过什么软件转换成用户眼中的页面?通过浏览器“解析和渲染”常见:IE、Firefox、Chorme(辅助、自带调试功能多)、Saf......
  • 01_Avalonia+.NET 6 初识篇
    https://zhuanlan.zhihu.com/p/539490994 前言应信创(主要是国产麒麟系统)的要求,最近在看C/S架构跨平台的解决方案。由于之前的系统是使用WPF开发的,使用Avalonia跨平台改动的工作量会比较小。Avalonia是一个跨平台的.NETUI框架,支持Windows,Linux,MacOSX,IOS环境......
  • 【9.0】前端基础之JavaScript初识
    【9.0】前端基础之JavaScript初识js也是一门面向对象的编程语言,一切皆对象【一】变量命名规范变量名只能是数字/字母/下划线/$变量名命名规范(js中推荐驼峰式命名法)变量民不能用关键字作为变量名【二】JS代码的书写位置可以单独开设JS文件书写还可以直接在浏览......
  • (一)kafka从入门到精通之初识kafka
    一、发布订阅系统在学习kafka之前,我们先来看看什么是发布订阅系统。概念数据的发送者不会直接把消息发送给接收者,这是发布与订阅消息系统的一个特点。发布者以某种方式对消息进行分类,接受者订阅它们,以便接受特定类型的消息。发布与订阅系统一般会有一个broker,也就是发布消息的......