Skip to content

工作流引擎集成

**本文引用的文件** - [LemesServiceDmWorkflowServerApplication.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/java/com/lenovo/lemes/service/dm/workflow/LemesServiceDmWorkflowServerApplication.java) - [application.yml](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/resources/application.yml) - [bootstrap.yml](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/resources/bootstrap.yml) - [pom.xml(workflow-server)](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/pom.xml) - [pom.xml(workflow-common)](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/pom.xml) - [AsyncPoolConfig.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/common/AsyncPoolConfig.java) - [FlowRepositoryServiceImpl.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/java/com/lenovo/lemes/service/dm/workflow/service/impl/FlowRepositoryServiceImpl.java) - [FlowRuntimeServiceImpl.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/java/com/lenovo/lemes/service/dm/workflow/service/impl/FlowRuntimeServiceImpl.java) - [WorkFlowBusinessEnum.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/enums/WorkFlowBusinessEnum.java) - [FlowClient.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/client/feign/FlowClient.java) - [FlowUserDo.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/model/workflow/FlowUserDo.java) - [init.js(前端Flowable初始化)](file://dm/lemes-web/src/components/bpmnModeler/flowable/init.js)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论
  10. 附录

简介

本技术文档面向DeviceMate工作流引擎集成,聚焦于Flowable流程引擎在Spring Boot中的集成方案与运行实践,涵盖引擎初始化、数据源与事务管理、缓存策略、服务启动与注册发现、自动配置与自定义配置、参数调优、性能监控与故障排除,并提供可落地的配置示例与最佳实践建议。

项目结构

工作流服务位于“lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow”模块,采用分层与多模块组织:

  • workflow-common:公共能力与实体、枚举、异步线程池配置、Feign客户端接口定义
  • workflow-server:Spring Boot应用入口、控制器、服务实现、资源文件(流程图、国际化、配置)

图表来源

章节来源

核心组件

  • 应用入口与注册发现
    • 启动类启用服务注册与发现、Feign客户端扫描与排除Druid自动配置
  • 配置体系
    • bootstrap.yml:端口、Nacos注册发现、配置中心、日志与管理端点
    • application.yml:MyBatis拦截器规则(查询/更新)
  • Flowable集成
    • 使用Flowable Spring Boot Starter Process REST,引入引擎与REST API
    • 通过RepositoryService、RuntimeService等进行流程部署、查询与运行时控制
  • 业务枚举与Feign客户端
    • WorkFlowBusinessEnum:业务键与类型映射
    • FlowClient:对内提供REST调用接口,配合降级与统一配置

章节来源

架构总览

下图展示工作流服务在微服务体系中的位置与关键交互:

图表来源

详细组件分析

引擎初始化与自动配置

  • 启动类启用服务注册与Feign客户端,排除Druid自动配置以避免与业务数据源冲突
  • Flowable通过starter引入,自动装配RepositoryService、RuntimeService、HistoryService等核心服务
  • Nacos作为注册中心与配置中心,支持动态配置与服务治理

图表来源

章节来源

数据源配置与事务管理

  • 数据源:使用Druid(排除自动配置由启动类控制),结合MyBatis Plus进行持久化
  • 事务:运行时操作使用声明式事务,确保流程实例删除等关键操作的原子性
  • 拦截器:通过application.yml配置MyBatis拦截器规则,限定查询/更新范围,提升安全性与可控性

图表来源

章节来源

缓存策略

  • 当前实现未显式引入缓存中间件;流程图渲染与历史节点高亮通过实时查询与生成实现
  • 建议在高频查询场景(如流程图节点解析、角色映射)引入Redis缓存,降低引擎与数据库压力

章节来源

工作流服务启动流程、服务注册与发现

  • 启动类启用@EnableDiscoveryClient与@EnableFeignClients,结合bootstrap.yml中的Nacos配置,实现服务注册与远程调用
  • 管理端点暴露,便于健康检查与运维

图表来源

章节来源

Flowable与Spring Boot集成模式

  • 使用Flowable Spring Boot Starter Process REST,自动装配引擎与REST API
  • 通过RepositoryService进行流程部署与查询,通过RuntimeService进行流程启动与变量管理
  • 业务侧通过枚举与Feign客户端对接其他服务或内部模块

图表来源

章节来源

自动配置与自定义配置选项

  • 自动配置
    • Flowable Starter自动装配引擎服务
    • Nacos自动注册与配置拉取
  • 自定义配置
    • application.yml:MyBatis拦截器规则
    • bootstrap.yml:端口、Nacos地址与命名空间、管理端点、日志路径与级别
    • AsyncPoolConfig:自定义异步线程池参数

章节来源

引擎参数调优与性能监控

  • 线程池调优
    • AsyncPoolConfig提供核心/最大线程数、队列容量、拒绝策略等参数,建议根据并发峰值与CPU核数调整
  • 日志与监控
    • bootstrap.yml开启管理端点,便于健康检查与指标暴露
    • 建议接入Prometheus/Grafana进行指标采集与可视化
  • 数据库与连接池
    • 使用Druid并结合业务DAO拦截器限制范围,减少误操作风险
  • 流程图渲染
    • 对高并发场景建议引入Redis缓存流程图元数据,减少BPMN模型解析开销

章节来源

故障排除

  • 常见问题定位
    • 流程实例不存在:运行时查询异常,需检查流程定义Key与实例ID
    • 流程开启失败:校验流程Key、业务Key与变量,确认身份上下文设置
    • 删除流程实例异常:检查事务传播与回滚原因
  • 建议排查步骤
    • 查看日志路径与级别
    • 核对Nacos注册状态与配置拉取情况
    • 检查数据库连接与事务一致性

章节来源

依赖关系分析

  • 外部依赖
    • Flowable:引擎与REST API
    • Spring Cloud:服务注册与发现、配置中心
    • MyBatis Plus:ORM与拦截器
    • Druid:数据源与监控
  • 内部模块
    • workflow-common:公共枚举、异步线程池、Feign客户端
    • workflow-server:应用入口、控制器、服务实现、资源文件

图表来源

章节来源

性能考虑

  • 并发与线程池
    • 根据业务峰值调整异步线程池大小与队列容量,避免拒绝策略导致的任务丢失
  • 数据访问
    • 利用DAO拦截器限制查询/更新范围,减少不必要的全表扫描
  • 渲染与缓存
    • 高频流程图渲染建议引入缓存,降低引擎解析成本
  • 监控与告警
    • 暴露管理端点,结合Prometheus/Grafana进行性能观测

故障排除指南

  • 启动与注册
    • 确认Nacos地址、命名空间与组配置正确
    • 检查服务端口与健康检查端点
  • 引擎与流程
    • 校验流程Key与版本,确认流程已部署
    • 检查变量传递与身份上下文设置
  • 数据与事务
    • 关注事务回滚原因,确保关键操作在事务边界内
  • 日志与诊断
    • 查看日志路径与级别,定位异常堆栈

章节来源

结论

本集成方案基于Flowable与Spring Boot,结合Nacos实现服务化与配置化,通过RepositoryService与RuntimeService完成流程生命周期管理。建议在生产环境中完善缓存策略、性能监控与告警体系,并持续优化线程池与数据访问策略,以满足高并发与高可用需求。

附录

  • 前端Flowable初始化
    • 前端BPMN Modeler提供基础流程XML模板初始化能力,便于快速构建流程图

章节来源