以下是针对 Flowable 工作流引擎 的深度详解,涵盖架构设计、核心功能、技术特性及实战场景,帮助您全面掌握这一企业级流程自动化解决方案:
一、Flowable 核心定位
Flowable 是基于 Java 的 轻量级开源 BPMN 2.0 引擎(扩展支持 CMMN/DMN),由 Activiti 核心开发者创建,专注于:
- 高性能流程执行:毫秒级流程实例启动
- 微服务友好架构:独立引擎模块,支持容器化部署
- 现代技术栈整合:Spring Boot、Quarkus、云原生支持
- 多标准统一平台:BPMN(流程)、CMMN(案例)、DMN(决策)协同运作
二、核心模块架构
-
流程引擎 (BPMN Engine)
- 支持 BPMN 2.0 全部元素(包括复杂网关、事件子流程)
- 异步延续 (Async Continuation):提升高并发吞吐量
- 执行监听器 (Execution Listeners):注入自定义逻辑
-
案例引擎 (CMMN Engine)
- 动态任务管理:通过
Sentry
监听数据/事件变化 - 案例文件 (Case File):共享上下文数据存储
- 计划项 (Plan Item):支持动态添加/跳过任务
- 动态任务管理:通过
-
决策引擎 (DMN Engine)
- FEEL 表达式支持
- 决策表 (Decision Table):命中策略(First/Collect/Any)
- 决策服务 (Decision Service):独立部署为 REST 端点
三、关键技术特性
1. 高性能设计
优化手段 | 效果 |
---|---|
异步任务分片 (Async Executor) | 10k+ 流程实例/秒(标准服务器) |
流程实例缓存 (L1/L2 Cache) | 减少数据库访问 90%+ |
批量处理 (Bulk Operations) | 高效处理历史数据清理等操作 |
2. 高可用部署
- 分布式作业调度:基于 Redis/Zookeeper 的锁机制
- 数据库分片:支持流程数据按租户水平拆分
- 历史数据分离:归档表与运行时表物理隔离
3. 扩展机制
- Delegate Execution
public class PaymentTask implements JavaDelegate { public void execute(DelegateExecution execution) { String orderId = (String) execution.getVariable("orderId"); // 调用支付服务... } }
- 事件监听器 (Event Listeners)
- 捕获事件:
PROCESS_STARTED
,TASK_COMPLETED
,VARIABLE_UPDATED
- 捕获事件:
- 自定义命令拦截器 (Command Interceptors)
- 在引擎操作前后注入逻辑(如审计日志)
四、Spring Boot 集成实战
1. 基础配置
# application.yml
flowable:
async-executor-activate: true
database-schema-update: true
history-level: audit # 记录完整审计日志
2. 流程部署(自动扫描)
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Bean
public CommandLineRunner init(RepositoryService repositoryService) {
return args -> {
repositoryService.createDeployment()
.addClasspathResource("processes/order-process.bpmn20.xml")
.deploy();
};
}
}
3. 启动流程实例
@Autowired RuntimeService runtimeService;
public void startOrderProcess(String orderId) {
Map<String, Object> variables = new HashMap<>();
variables.put("orderId", orderId);
variables.put("customerLevel", "GOLD");
runtimeService.startProcessInstanceByKey("orderProcess", variables);
}
五、高级功能详解
1. 流程版本控制
SELECT * FROM ACT_RE_PROCDEF
WHERE KEY_ = 'orderProcess' ORDER BY VERSION_ DESC;
- 相同流程 key 可部署多版本
- 新流程实例自动使用最高版本
- 旧实例继续运行在原始版本
2. 事务一致性方案
场景 | 解决方案 |
---|---|
服务调用失败 | BPMN 事务子流程 + 补偿事件 |
跨系统数据同步 | Saga 模式 实现最终一致性 |
人工任务超时 | 边界定时器事件 触发超时处理 |
3. 动态流程修改
RuntimeService runtimeService = ...;
String processInstanceId = "1001";
// 动态添加用户任务
runtimeService.addUserTask(processInstanceId, "dynamicTask", "审批专员");
六、监控与管理
1. 内置监控端点
GET /flowable-rest/app/management/engine # 引擎状态
GET /flowable-rest/app/management/jobs # 异步作业队列
GET /flowable-task/app/rest/tasks?assignee=kermit # 用户任务查询
2. Prometheus 监控集成
# 暴露 Flowable 指标
management:
endpoints:
web:
exposure:
include: prometheus,flowable
metrics:
tags:
application: ${spring.application.name}
3. Flowable Admin 控制台
- 实时查看流程实例状态
- 动态修改任务负责人
- 批量终止/重启流程实例
七、典型应用场景
场景 1:金融贷款审批(BPMN + DMN)
场景 2:医疗急救响应(CMMN 主导)
graph TB
C[急救案例] --> D[基础评估]
D --> E{生命体征危急?}
E -->|是| F[启动抢救小组]
E -->|否| G[常规检查]
F --> H[动态添加专科会诊] // 根据病情变化
八、Flowable vs Activiti 关键区别
特性 | Flowable | Activiti 7 |
---|---|---|
开源协议 | Apache 2.0 | Apache 2.0 |
性能优化 | ✅ 异步延续/批量处理 | ⚠️ 社区版优化有限 |
CMMN 支持 | ✅ 完整实现 | ❌ 仅基础功能 |
DMN FEEL 表达式 | ✅ 完整支持 | ⚠️ 部分支持 |
微服务支持 | ✅ 轻量引擎 + Docker 镜像 | ✅ Camunda 商业版更成熟 |
云原生集成 | ✅ Kubernetes Operator | ❌ 无官方方案 |
九、最佳实践建议
-
流程设计原则
- 单个 BPMN 流程不超过 30 个节点
- 复杂决策逻辑抽离到 DMN
- 异常处理统一用错误边界事件
-
性能调优重点
-- 避免全表扫描的索引优化 CREATE INDEX IDX_FLOWABLE_RU_EXEC ON ACT_RU_EXECUTION(PROC_INST_ID_); CREATE INDEX IDX_FLOWABLE_HI_VAR ON ACT_HI_VARINST(PROC_INST_ID_);
-
扩展开发规范
- 使用
DelegateExecution
而非直接访问数据库 - 事件监听器中禁止阻塞操作
- 自定义任务查询使用
TaskService.createTaskQuery()
- 使用
💡 迁移提示:从 Activiti 5/6 迁移到 Flowable 6+ 时,使用 flowable-migration-tool 自动化转换数据库脚本。
Flowable 凭借其 模块化架构、极致性能和标准兼容性,已成为企业级流程自动化的首选开源引擎。建议通过其 官方示例库 进行动手实验以深化理解。