你是否也曾面对层层嵌套的 if-else 代码结构感到无奈?一个业务流程需要串联多个步骤,每次调整顺序或增加逻辑分支都得修改大量代码,维护成本直线上升。
这种场景在订单处理、金融风控审批、数据清洗等业务中屡见不鲜。今天,我们来认识一款国产轻量级规则引擎——LiteFlow,看看它是如何将复杂的业务逻辑编排变得优雅而简单的。
什么是 LiteFlow?
LiteFlow 是一个轻量、快速、稳定且可编排的组件式规则引擎框架。它的核心设计理念是将复杂的业务逻辑拆分为独立的组件,然后通过规则文件动态定义组件的执行顺序和依赖关系,实现“搭积木式”的业务流程管理。
官方文档:https://liteflow.cc/
核心特性一览
组件化驱动,逻辑解耦
所有业务逻辑都被封装为独立的组件,组件间通过上下文传递数据,彼此互不直接依赖。每个组件只负责单一职责,就像流水线上的工人,专注于自己的工作内容。这种设计让代码更加清晰,测试更加简单。如果你经常浏览 技术文档 或研究 开源实战 中的项目源码,会发现这种组件化思路正是构建复杂 后端 & 架构 系统的核心思想。
简洁的规则定义
LiteFlow 使用类 EL 表达式来定义组件执行逻辑,支持串行( THEN )、并行( WHEN )、条件分支( IF / ELSE )、循环( FOR )等多种流程结构。规则文件支持 XML、JSON、YAML 三种格式,学习成本极低,十分钟就能上手。
<!-- 比如:订单处理流程 -->
<chain name="orderProcess">
THEN(
validateOrder, // 订单校验
WHEN(checkStock, calcPrice), // 并行检查库存和计算价格
riskCheck, // 风险检查
saveOrder // 保存订单
);
</chain>
动态热更新
规则文件或脚本组件修改后,可以实时加载并生效,无需重启应用。这一特性特别适合业务规则频繁变更的场景,如大促活动规则调整、风控策略更新等。规则可存储在本地文件、数据库、Nacos、Zookeeper 等多种介质中,适配不同部署环境。
多语言脚本支持
除了 Java,LiteFlow 还支持 Groovy、JavaScript、Python、Lua、QLExpress、Aviator 等 8 种脚本语言。这意味着非 Java 开发者也能直接编写组件逻辑,在脚本中调用 Java 方法或引用外部服务也完全没问题。
轻量与高性能
LiteFlow 核心包不足 100KB,对系统额外消耗极小。规则解析采用预编译机制,执行效率接近原生 Java 代码。在并发场景下表现优异,支持高并发流程执行。
快速上手体验
让我们通过一个简单示例,快速体验 LiteFlow 的魅力。
1. 添加依赖
在 SpringBoot 项目的 pom.xml 中添加 LiteFlow 依赖:
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-spring-boot-starter</artifactId>
<version>2.12.0</version>
</dependency>
2. 定义业务组件
创建三个简单的组件,分别用于数据校验、数据处理和结果保存:
@LiteflowComponent("validateCmp")
@Slf4j
public class ValidateComponent extends NodeComponent {
@Override
public void process() {
log.info("执行数据校验逻辑");
}
}
@LiteflowComponent("processCmp")
@Slf4j
public class ProcessComponent extends NodeComponent {
@Override
public void process() {
log.info("执行数据处理逻辑");
}
}
@LiteflowComponent("saveCmp")
@Slf4j
public class SaveComponent extends NodeComponent {
@Override
public void process() {
log.info("执行结果保存逻辑");
}
}
3. 配置规则文件
在 application.yml 中指定规则文件路径:
liteflow:
# 规则文件路径
rule-source: classpath:config/flow.xml
# 打印执行日志
print-execution-log: true
在 resources/config/flow.xml 中定义执行规则:
<?xml version="1.0" encoding="UTF-8"?>
<flow>
<chain name="chain1">
THEN(validateCmp, processCmp, saveCmp);
</chain>
</flow>
4. 执行流程
在业务代码中调用流程:
@RestController
@RequestMapping("/flow")
@Slf4j
public class FlowController {
@Resource
private FlowExecutor flowExecutor;
@GetMapping
public void ExecBusiness() {
LiteflowResponse response = flowExecutor.execute2Resp("chain1");
if (response.isSuccess()) {
log.info("流程执行成功");
} else {
log.error("流程执行失败:" + response.getMessage());
}
}
}
测试
浏览器访问:http://127.0.0.1:8080/flow

就是这样简单!三个步骤就完成了一个完整的流程编排。如果需要调整执行顺序,只需修改规则文件,无需改动任何 Java 代码。
适用场景分析
LiteFlow 并非万能工具,但在特定场景下能发挥巨大价值。
最适合的场景
复杂业务流程编排
订单处理:订单校验 → 库存检查 → 价格计算 → 风控审核 → 物流调度。每个环节可能涉及多个子步骤,顺序调整频繁。
金融审批:身份验证 → 征信查询 → 风险评估 → 人工复核。流程复杂且规则经常变化,需要灵活调整。
需要频繁调整的业务规则
促销活动组合:满减、折扣、赠品、限时抢购等多种促销方式需要动态组合。
数据清洗管道:去重 → 格式转换 → 数据补全 → 质量检查。不同数据源可能需要不同的处理流程。
需要并行处理的场景
当某些步骤可以同时执行以提升性能时,LiteFlow 的并行编排能力能够充分利用系统资源,缩短整体处理时间。
不适合的场景
简单的 CRUD 操作、2~3 个步骤且基本不变的流程、需要极低延迟的实时系统、性能要求极高的计算密集型任务——这些场景使用 LiteFlow 可能有些“杀鸡用牛刀”。
与其他方案对比
在规则引擎领域,有 Drools、EasyRules、Camunda 等成熟方案,LiteFlow 的定位有何不同?
与 Drools 相比,LiteFlow 更侧重于流程编排而非复杂的规则推理。Drools 适合处理极其复杂的业务规则决策,但学习曲线陡峭,引入成本高。LiteFlow 则专注于如何把一堆组件按既定顺序组织起来,学习成本低,上手快。
与 EasyRules 相比,LiteFlow 具备强大的流程编排能力,而 EasyRules 主要适合简单的“条件-动作”场景,缺乏复杂流程的编排能力。
与 Camunda、Activiti 等工作流引擎相比,LiteFlow 侧重于程序内部的逻辑编排,而它们更专注于人工审批、长流程、状态持久化的业务流程管理。如果你对这类 Java 技术栈的决策感兴趣,不妨在 云栈社区 和更多开发者一起探讨实际落地经验。
看起来简单,背后却是对复杂度的极致驯服。下次当你再面对一坨纠缠不清的业务代码时,不妨想想 LiteFlow 的“搭积木”哲学。