一、流程定义:业务逻辑的数字化载体
流程定义是工作流引擎的核心数据结构,采用JSON格式存储业务逻辑的完整描述。其设计遵循分层架构原则,包含六大核心模块:
-
基础属性层
定义流程唯一标识(processId)、版本号(version)、启动权限(startPermission)等元数据。示例配置如下:{"processId": "order_approval","version": "1.0","startPermission": "role:manager"}
-
节点拓扑层
通过节点数组(nodes)和流转数组(transitions)构建有向无环图(DAG)。节点类型包含:- 任务节点(TaskNode):执行具体业务逻辑
- 网关节点(GatewayNode):实现条件分支控制
- 容器节点(ContainerNode):支持子流程嵌套
-
数据模型层
流程变量定义采用键值对结构,支持JUEL表达式动态解析:"variables": [{"name": "approvalAmount","type": "decimal","defaultValue": "${order.totalAmount * 1.1}"}]
-
可视化层
定义节点坐标(x,y)、颜色、连线样式等UI属性,实现流程图与业务逻辑的同步渲染。
二、节点体系:流程执行的原子单元
FreeFlow提供五种标准节点类型,支持通过扩展接口实现自定义节点:
1. 任务节点(TaskNode)
基础执行单元,支持三种任务分配策略:
- 固定分配:指定具体执行人
- 角色分配:匹配组织架构中的角色
- 表达式分配:通过JUEL表达式动态计算
任务状态机包含:待领取→执行中→已完成→已取消四种状态转换。
2. 网关节点(GatewayNode)
实现流程分支控制,包含三种标准类型:
- 排他网关(Exclusive):基于条件表达式选择唯一路径
- 并行网关(Parallel):同时激活所有后续分支
- 包容网关(Inclusive):满足条件的分支均被激活
3. 阶段节点(PhaseNode)
容器型节点,支持嵌套其他节点形成层级结构。典型应用场景:
- 将复杂流程拆分为多个可管理阶段
- 实现阶段级事务控制(如某阶段失败自动回滚)
- 配置阶段级超时提醒规则
4. 子流程节点(SubProcessNode)
支持三种调用模式:
- 同步调用:主流程等待子流程完成
- 异步调用:主流程继续执行,子流程后台运行
- 回调模式:子流程完成后触发主流程回调
5. 独立子流程节点(IsolatedSubProcessNode)
创建与主流程完全隔离的执行环境,适用于:
- 需要独立变量作用域的场景
- 跨系统流程集成的隔离需求
- 资源消耗较大的长流程隔离
三、流转控制:业务规则的动态执行
流转定义通过有向边(Transition)连接节点,支持三种控制模式:
-
顺序流转
基础线性执行,配置示例:{"source": "node1","target": "node2","condition": null}
-
条件流转
基于JUEL表达式实现动态路由:{"source": "approval_node","target": "auto_reject","condition": "${approvalAmount > 10000}"}
-
异常流转
定义异常处理路径,支持捕获特定异常类型:{"source": "payment_node","target": "retry_handler","exceptionType": "PaymentTimeoutException"}
四、变量管理:数据驱动的流程控制
流程变量系统采用三级作用域模型:
-
流程级变量
整个流程实例共享,生命周期贯穿流程始终。示例:{"name": "global_counter","type": "integer","scope": "PROCESS"}
-
节点级变量
仅当前节点可见,适用于节点内部计算:{"name": "local_temp","type": "string","scope": "NODE"}
-
任务级变量
绑定到具体任务实例,支持任务个性化处理:{"name": "assignee_comment","type": "text","scope": "TASK"}
变量操作支持两种模式:
- 声明式定义:在流程定义中预设变量结构
- 动态注入:通过API在运行时添加变量
五、最佳实践:复杂场景解决方案
1. 动态流程分支
通过网关节点+变量条件实现动态路由:
// 条件表达式示例boolean isVip = (Boolean) context.getVariable("isVip");return isVip ? "vip_path" : "normal_path";
2. 嵌套子流程管理
采用阶段节点封装子流程调用,实现:
- 统一的事务边界
- 集中的异常处理
- 简化的流程图展示
3. 异步任务处理
结合消息队列实现耗时任务异步化:
- 创建异步任务节点
- 配置消息队列连接参数
- 设置任务完成回调地址
4. 流程版本控制
通过版本号机制实现:
- 新旧流程并行运行
- 灰度发布支持
- 历史实例兼容处理
六、监控与运维体系
-
运行时监控
提供流程实例状态查询、节点执行日志、任务堆栈跟踪等功能。 -
性能分析
记录节点执行耗时、资源消耗等指标,支持生成性能报告。 -
异常处理
内置死信队列(DLQ)机制处理失败任务,支持自定义重试策略。 -
管理API
提供流程挂起、恢复、终止等运维操作接口,示例:
```java
// 挂起流程实例
workflowClient.suspendProcess(“order_123”);
// 跳过失败节点
workflowClient.skipNode(“order_123”, “payment_node”);
```
FreeFlow工作流引擎通过模块化设计实现了业务逻辑与执行控制的分离,其灵活的节点体系和强大的流转控制能力,可满足从简单审批到复杂业务编排的各种场景需求。开发者通过掌握本文介绍的核心概念与实现原理,能够快速构建出稳定高效的企业级工作流应用。