Flowable 工作流引擎 速览

以下是针对 Flowable 工作流引擎 的深度详解,涵盖架构设计、核心功能、技术特性及实战场景,帮助您全面掌握这一企业级流程自动化解决方案:


一、Flowable 核心定位

Flowable 是基于 Java 的 轻量级开源 BPMN 2.0 引擎(扩展支持 CMMN/DMN),由 Activiti 核心开发者创建,专注于:

  • 高性能流程执行:毫秒级流程实例启动
  • 微服务友好架构:独立引擎模块,支持容器化部署
  • 现代技术栈整合:Spring Boot、Quarkus、云原生支持
  • 多标准统一平台:BPMN(流程)、CMMN(案例)、DMN(决策)协同运作

二、核心模块架构

设计模型
用户任务
Flowable Engine
BPMN Engine
CMMN Engine
DMN Engine
Form Engine
Identity Management
Event Registry
Async Job Executor
Flowable REST API
Flowable Admin
Flowable Modeler
Flowable Task App
  1. 流程引擎 (BPMN Engine)

    • 支持 BPMN 2.0 全部元素(包括复杂网关、事件子流程)
    • 异步延续 (Async Continuation):提升高并发吞吐量
    • 执行监听器 (Execution Listeners):注入自定义逻辑
  2. 案例引擎 (CMMN Engine)

    • 动态任务管理:通过 Sentry 监听数据/事件变化
    • 案例文件 (Case File):共享上下文数据存储
    • 计划项 (Plan Item):支持动态添加/跳过任务
  3. 决策引擎 (DMN Engine)

    • FEEL 表达式支持
    • 决策表 (Decision Table):命中策略(First/Collect/Any)
    • 决策服务 (Decision Service):独立部署为 REST 端点

三、关键技术特性

1. 高性能设计
优化手段效果
异步任务分片 (Async Executor)10k+ 流程实例/秒(标准服务器)
流程实例缓存 (L1/L2 Cache)减少数据库访问 90%+
批量处理 (Bulk Operations)高效处理历史数据清理等操作
2. 高可用部署
业务应用
负载均衡
Flowable Node 1
Flowable Node 2
共享数据库
分布式锁 Redis
  • 分布式作业调度:基于 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)
调用
申请提交
自动初审
DMN 信用评分
评分>70?
自动批准
人工复审
场景 2:医疗急救响应(CMMN 主导)
graph TB
C[急救案例] --> D[基础评估]
D --> E{生命体征危急?}
E -->|是| F[启动抢救小组]
E -->|否| G[常规检查]
F --> H[动态添加专科会诊]  // 根据病情变化

八、Flowable vs Activiti 关键区别

特性FlowableActiviti 7
开源协议Apache 2.0Apache 2.0
性能优化✅ 异步延续/批量处理⚠️ 社区版优化有限
CMMN 支持✅ 完整实现❌ 仅基础功能
DMN FEEL 表达式✅ 完整支持⚠️ 部分支持
微服务支持✅ 轻量引擎 + Docker 镜像✅ Camunda 商业版更成熟
云原生集成✅ Kubernetes Operator❌ 无官方方案

九、最佳实践建议

  1. 流程设计原则

    • 单个 BPMN 流程不超过 30 个节点
    • 复杂决策逻辑抽离到 DMN
    • 异常处理统一用错误边界事件
  2. 性能调优重点

    -- 避免全表扫描的索引优化
    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_);
    
  3. 扩展开发规范

    • 使用 DelegateExecution 而非直接访问数据库
    • 事件监听器中禁止阻塞操作
    • 自定义任务查询使用 TaskService.createTaskQuery()

💡 迁移提示:从 Activiti 5/6 迁移到 Flowable 6+ 时,使用 flowable-migration-tool 自动化转换数据库脚本。

Flowable 凭借其 模块化架构、极致性能和标准兼容性,已成为企业级流程自动化的首选开源引擎。建议通过其 官方示例库 进行动手实验以深化理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值