流程引擎和规则引擎技术实现

--------------------------------------------------------------------------------------------------------------

流程引擎与规则引擎:技术实现全解析

 
流程引擎核心是状态机驱动的流程流转控制,按 BPMN 等标准定义步骤顺序、分支聚合、任务分配,驱动业务从一个节点推进到下一个节点;规则引擎核心是模式匹配的决策推理,基于 IF-THEN 产生式规则,用 Rete 等算法高效匹配数据与规则,实现业务逻辑解耦与动态决策。两者常结合使用,流程负责 “做什么、按什么顺序做”,规则负责 “节点内怎么做、如何决策”。
 

 

一、流程引擎(Workflow Engine)技术实现

 

1. 核心概念与模型

 
  • 流程定义(Process Definition):静态模板,遵循BPMN 2.0标准,用 XML/JSON 描述节点、流转线、条件、任务类型、参与者、监听器。
  • 流程实例(Process Instance):流程定义的运行时对象,一个定义可创建 N 个实例,存储当前状态、变量、执行上下文。
  • 任务(Task):流程执行单元,分用户任务(人工审批)、服务任务(自动调用接口 / 脚本)、网关(排他 / 并行 / 包容 / 事件网关)、子流程、边界事件(超时、异常、消息)。
  • 状态机模型:核心是 当前状态 + 触发动作 = 下一状态,引擎校验流转合法性、管理生命周期。
 

2. 整体架构(分层设计)

 
  1. 建模层
    • 可视化设计器(Vue/React+BPMN-JS):拖拽编辑、校验、导出 BPMN/JSON。
    • 解析器:将 BPMN XML 转为内存对象模型或AST 抽象语法树。
     
  2. 核心引擎层
    • 执行器:驱动实例流转、处理网关分支 / 聚合、触发任务、调用服务。
    • 任务管理器:创建 / 分配 / 完成 / 查询任务、处理代办 / 已办、支持会签 / 或签 / 转办。
    • 变量管理器:存储流程 / 任务 / 局部变量、支持基本类型 / 对象 / 集合、事务隔离。
    • 事件总线:监听流程 / 任务 / 变量事件(启动 / 完成 / 异常)、支持同步 / 异步、集成消息队列。
    • 调度器:处理定时任务 / 边界超时事件(Quartz/XXL-Job + 分布式锁)。
     
  3. 持久化层
    • 核心表:ACT_RE_PROCDEF(流程定义)、ACT_RU_EXECUTION(运行实例)、ACT_RU_TASK(运行任务)、ACT_HI_PROCINST(历史实例)、ACT_HI_TASK(历史任务)、ACT_GE_BYTEARRAY(资源文件)。
    • 存储:MySQL/Oracle/PostgreSQL/ 国产数据库(达梦、人大金仓)。
     
  4. API 与集成层
    • 核心 API:startProcessInstancecompleteTaskclaimTaskgetProcessVariables
    • 集成:REST/gRPC、Spring/SpringBoot、消息队列(Kafka/RocketMQ)。
     
 

3. 两种执行模式

 
  • 解释模式(Interpreted):Activiti 5/6、Flowable 5/6
    • 实现:运行时逐节点解析 BPMN、反射执行。
    • 优点:支持热部署、动态修改流程定义。
    • 缺点:性能较低、执行路径不可见。
     
  • 编译模式(Compiled):Camunda、Activiti 7、Zeebe、CompileFlow
    • 实现:部署时将 BPMN 编译为Java 字节码 / 状态机代码、原生执行。
    • 优点:性能高、类型安全、可静态校验。
    • 缺点:修改需重新编译、热部署复杂。
     
 

4. 核心技术要点

 
  • 流转控制
    • 排他网关:conditionExpression(EL 表达式)判断流转。
    • 并行网关:拆分多分支、全部完成后聚合。
    • 循环节点:基于条件重复执行。
     
  • 任务分配策略
    • 静态分配:固定用户 / 角色。
    • 动态分配:表达式、监听器、业务规则、候选人 / 组。
    • 会签:multiInstance、完成比例 / 数量判断。
     
  • 分布式与高可用
    • 无状态设计、集群部署、Redis 共享状态。
    • 乐观锁防并发冲突、分布式任务调度。
    • 事件溯源(Zeebe):记录所有事件、可重放恢复状态。
     
  • 事务与一致性
    • 流程操作与业务数据同事务(Spring Transaction)。
    • 异常处理:回滚、补偿机制、失败重试。
     
 

5. 主流实现与代码示例(Java)

 
  • Activiti/Flowable
 
java
 
运行
 
 
 
 
// 1. 初始化引擎
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = engine.getTaskService();
RuntimeService runtimeService = engine.getRuntimeService();

// 2. 启动流程
runtimeService.startProcessInstanceByKey("leaveProcess", variables);

// 3. 查询并完成任务
List<Task> tasks = taskService.createTaskQuery().taskAssignee("zhangsan").list();
for (Task task : tasks) {
    taskService.complete(task.getId(), variables);
}
 
 
  • CompileFlow(编译型)
 
java
 
运行
 
 
 
 
// 流程定义(TBBPM)→ 编译为Java类 → 执行
ProcessEngine engine = ProcessEngine.newInstance();
ProcessResult result = engine.execute("leaveProcess", variables);
 
 

 

二、规则引擎(Rule Engine)技术实现

 

1. 核心原理:产生式规则系统

 
  • 规则结构:IF 条件(Condition) THEN 动作(Action)
  • 核心三组件
    1. 规则库(Rule Base):存储所有规则、支持版本 / 灰度 / 权限。
    2. 工作内存(Working Memory):存放输入事实(Fact)(业务数据)。
    3. 推理引擎(Inference Engine):匹配事实与规则、解决冲突、执行动作。
     
 

2. 整体架构

 
  1. 规则建模层
    • 规则集:IF-THEN 脚本(DRL/DSL)。
    • 决策表 / 决策矩阵:表格化配置。
    • 决策树:可视化分支决策。
    • 评分卡:金融风控打分。
     
  2. 规则编译层
    • 词法 / 语法解析(ANTLR):生成 AST。
    • 优化:合并条件、共享节点、生成Rete 网络。
     
  3. 推理执行层
    • 模式匹配器:核心算法(Rete/LEAPS/Phreak)。
    • 议程(Agenda):存储匹配规则、按优先级排序。
    • 冲突解决策略:优先级、最近激活、复杂度、事实顺序。
    • 执行器:执行规则动作(修改事实、调用 API、返回结果)。
     
  4. 扩展层
    • 函数库、脚本支持(Groovy/JS)、外部服务调用、监控审计。
     
 

3. 核心算法:Rete 算法(关键)

 
  • 思想:空间换时间,构建Rete 网络(条件节点有向无环图),共享重复条件、缓存中间匹配结果、避免全量重复匹配。
  • 网络结构
    • 根节点:事实入口。
    • 类型节点:按事实类型过滤。
    • Alpha 节点:单条件匹配(如age>18)。
    • Beta 节点:多条件联合(AND/OR)、连接不同事实。
    • 终止节点:规则触发、加入议程。
     
  • 执行流程
    1. 事实插入→传播网络→匹配 Alpha/Beta 节点。
    2. 完全匹配→加入议程。
    3. 按策略执行→修改事实→重新触发匹配(前向链推理)。
     
 

4. 两种推理模式

 
  • 前向链(Forward Chaining):数据→规则→结论(Drools),适合实时决策 / 风控 / 促销。
  • 后向链(Backward Chaining):目标→找条件→验证(Prolog),适合查询 / 诊断 / 专家系统。
 

5. 技术实现要点

 
  • 规则语言与 DSL
    • DRL(Drools Rule Language):
     
    drools
     
     
    rule "discount-diamond"
      salience 10 // 优先级
      when
        $order: Order(level == "DIAMOND", amount > 1000)
      then
        $order.setDiscount(0.2); // 8折
    end
    
     
     
  • 冲突解决
    • salience(优先级)、activation-groupagenda-group
     
  • 性能优化
    • Rete 网络共享、事实索引、惰性评估、规则分组、热点缓存。
     
  • 分布式规则引擎
    • 规则中心统一管理、客户端本地缓存、推送更新、集群执行。
     
 

6. 主流实现与代码示例(Drools)

 
java
 
运行
 
 
 
 
// 1. 初始化Kie容器
KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.getKieClasspathContainer();
KieSession kieSession = kieContainer.newKieSession("discount-session");

// 2. 插入事实
Order order = new Order("DIAMOND", new BigDecimal("2000"));
kieSession.insert(order);

// 3. 执行规则
int fired = kieSession.fireAllRules();
System.out.println("触发规则数:" + fired);
System.out.println("折扣后金额:" + order.getFinalAmount());

// 4. 关闭会话
kieSession.dispose();
 
 

 

三、流程引擎 + 规则引擎:融合实现(最佳实践)

 

1. 典型场景:费用报销

 
  1. 流程引擎:提交→部门审批→财务审核→出纳支付。
  2. 规则引擎(财务节点)
    • 规则 1:IF 招待费>2000 AND 无客户信息 THEN 驳回
    • 规则 2:IF 金额>50000 THEN 需CEO审批
    • 规则 3:IF 差旅超标 THEN 标记异常
     
 

2. 集成方式

 
  • 嵌入式:流程节点直接调用规则引擎 API(强耦合)。
  • 服务化:规则引擎独立部署、流程通过 HTTP/gRPC 调用(解耦)。
  • 规则流:规则引擎内置流程、用规则驱动流转(轻量流程)。
 

3. 技术价值

 
  • 业务逻辑解耦:流程与规则分离、独立变更、不发版。
  • 动态灵活:规则可视化配置、实时生效。
  • 复用性:规则跨流程复用、降低重复开发。
  • 可审计:流程轨迹 + 规则执行日志、全链路追溯。
 

 

四、技术选型对比

 
表格
 
维度流程引擎规则引擎
核心目标 控制流程流转、任务调度、状态管理 业务决策、条件判断、逻辑推理
数据模型 流程定义、实例、任务、状态机 规则库、事实、Rete 网络、议程
核心算法 状态机、有向图遍历、网关逻辑 Rete/LEAPS、模式匹配、前向推理
执行模式 步骤驱动、顺序 / 分支 / 并行 数据驱动、多规则匹配、冲突解决
主流框架 Activiti、Flowable、Camunda、Zeebe Drools、URule Pro、Easy Rules
应用场景 审批流、订单流程、工单系统、业务协同 风控、促销、授信、合规检查、评分
 

 

五、总结与落地建议

 
  • 流程引擎本质是标准化的状态机与任务调度系统,核心是流转控制与任务管理,适合长周期、多节点、强协作的业务流程。
  • 规则引擎本质是高效的模式匹配与推理系统,核心是业务逻辑解耦与动态决策,适合规则多变、复杂判断、高并发决策场景。
  • 落地路径:先梳理流程→抽取节点内规则→流程引擎控流转、规则引擎管决策→统一监控与运维→支持动态配置与热更新。
 
要不要我帮你整理一份流程引擎与规则引擎的技术选型清单,包含核心功能、性能指标、分布式支持、集成难度等对比项,方便你直接评估框架?

--------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------

posted @ 2026-04-14 16:19  hanease  阅读(117)  评论(0)    收藏  举报