news 2026/5/1 5:26:18

一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!

大家好,我是 Guide。今天来推荐一款非常优秀的国产规则引擎,说不定你曾经就用过。下面是正文。

你有没有接过那种祖传代码?一个几千行的if-else堡垒,改一行逻辑,要测半天。更糟的是,业务方今天说要"先 A 后 B",明天又改成"A 和 B 并行,等 C 完成再接 D",每次改流程都要重构代码。

LiteFlow 是一个国产规则引擎,专门解决"业务逻辑耦合"问题。它把瀑布流式的代码拆成一个个独立组件,用一套 DSL 语法重新编排,改流程就像搭积木。

解决了什么问题?

传统复杂业务系统的痛点:

  • 改一处动全身:代码里到处是硬编码的流程判断,改个顺序要改好几个地方。
  • 难以热变更:业务流程调整需要重新发版,没法实时生效。
  • 组件复用难:每个业务场景都写一套逻辑,同样的代码在到处复制。

LiteFlow 的核心思路是"工作台模式":想象一个工厂流水线,n 个工人围着工作台,每个人只负责自己那道工序,完成就把半成品放回工作台,下一个人接着做。工人之间不需要沟通,只需要关心自己手头的活和工作台上的资源。

映射到代码世界:工人就是组件,工作台就是上下文,工序顺序就是规则配置。

下图是 LiteFlow 官方文档对核心能力(组件编排、实时热更替和复用)的图解:

LiteFlow 是什么?

LiteFlow 是一款国产开源的轻量级规则引擎框架,专注解决复杂业务逻辑的解耦与编排问题,支持 Spring Boot 2.x/3.x,最低 JDK 8 即可运行。

核心功能

  • 组件化拆分:把长链条的业务逻辑拆成独立组件,每个组件只做一件事。
  • 规则驱动编排:用简洁的 EL 表达式定义组件执行顺序,支持串行、并行、条件、循环等复杂逻辑。
  • 脚本组件支持:支持 Java、JavaScript、Groovy、QLExpress、Python、Lua、Aviator 等多种脚本语言,Java 脚本编译速度在 v2.15.3 版本后提升了200 倍(2000 个脚本从 30 秒降到 150 毫秒)。
  • 热部署能力:规则和脚本可以存放在数据库、注册中心(Nacos、Etcd、Zookeeper),修改后实时生效,无需重启。
  • 可视化编排:支持 LiteFlowX 可视化编排界面,拖拽就能设计流程。
  • 自带简单监控:框架内自带一个命令行的监控,能够知道每个组件的运行耗时排行。

LiteFlow 的核心是基于 EL 表达式的规则解析引擎,在 v2.15.2 版本中,底层规则引擎从 QLExpress 3 全面升级到 QLExpress 4,带来性能提升:

测试指标QL3 版本QL4 版本提升幅度
编译阶段 TPS2,739 ops3,636 ops提升 32%
上下文参数注入55,826 ops222,625 ops提升 300%

数据来源:LiteFlow 官方压测报告,采用 benchmark 框架,2 次预热、3 次执行取平均值。

QLExpress是由阿里巴巴开源的轻量级动态脚本引擎,目标是将业务逻辑从繁重的 Java 代码中解耦,变成可以动态执行的脚本。

LiteFlow 在今年的 Gitee 年度开源项目评选中获得了基础软件赛道第二名的成绩。

快速上手

安装

/* by 01130.hk - online tools website : 01130.hk/zh/ports.html */ <dependency> <groupId>com.yomahub</groupId> <artifactId>liteflow-spring-boot-starter</artifactId> <version>2.15.3</version> </dependency>

LiteFlow 支持 JDK 8 ~ JDK 25 全版本,但如果你用 JDK 9+,建议直接上 v2.15.0+ 版本,无需额外配置 JVM 参数。

配置规则文件

application.properties里指定规则文件位置:

/* by 01130.hk - online tools website : 01130.hk/zh/ports.html */ liteflow.rule-source=config/flow.el.xml

然后在resources/config/flow.el.xml定义规则THEN(validateOrder, WHEN(checkStock, calcPrice), riskCheck, saveOrder);

<?xml version="1.0" encoding="UTF-8"?> <flow> <chain name="orderChain"> THEN( validateOrder, WHEN(checkStock, calcPrice), riskCheck, saveOrder ); </chain> </flow>

这段表达式定义了执行的拓扑结构:

  • THEN:串行执行,必须先执行完前面的节点,才能进入下一个。
  • WHEN:并行执行,在此例中,checkStock(检查库存)和calcPrice(计算价格)会同时开启异步线程执行,提升接口响应速度。

规则含义:先校验订单 → 然后并行查库存和算价格 → 再做风险检查 → 最后保存订单。

定义组件

通过实现NodeComponent定义组件:

@LiteflowComponent("validateOrder") public class ValidateOrderCmp extends NodeComponent { @Override public void process() { // 从上下文获取订单数据 OrderContext context = this.getContextBean(OrderContext.class); Order order = context.getOrder(); // 校验逻辑 if (order.getAmount() <= 0) { throw new IllegalArgumentException("订单金额必须大于0"); } // 把结果放回上下文,供后续组件使用 context.setValid(true); } }
  • @LiteflowComponent:复合注解,将类声明为 Spring 的 Bean,并给组件起一个 ID(validateOrder),这个 ID 必须与 XML 文件中的名称对应。
  • getContextBean:LiteFlow 处理数据的精髓,流程中的所有组件共享一个(或多个)上下文对象,避免在方法间传递大量参数,实现逻辑解耦。

LiteFlow 在 v2.8.0 后支持多上下文,在执行的时候同时初始化你传入的多个上下文。在组件里也可以根据 class 类型很方便的拿到。

// 传入 LiteflowResponse response = flowExecutor.execute2Resp("chain1", 流程初始参数, OrderContext.class, UserContext.class, SignContext.class); // 获取 OrderContext orderContext = this.getContextBean(OrderContext.class); UserContext userContext = this.getContextBean(UserContext.class); SignContext signContext = this.getContextBean(SignContext.class);

同理定义其他组件(checkStockcalcPriceriskChecksaveOrder)。

执行流程

@Service public class OrderService { @Resource private FlowExecutor flowExecutor; public void createOrder(Order order) { LiteflowResponse response = flowExecutor.execute2Resp( "orderChain", order, // 将数据作为初始参数 OrderContext.class // 让 LiteFlow 自动实例化上下文 ); } }

《SpringAI 智能面试平台+RAG 知识库》配套实战项目教程正在更新,涉及到 Prompt Engineering、大模型集成、RAG(检索增强生成)、高性能对象存储与向量数据库。后续的话,还会同步上 Agent 项目。

内容非常全面,非常适合想要实战 AI 项目或者准备 AI 大模型应用开发岗位面试的朋友,来一张刚写完的3.4w 字+35 道题目的 RAG 面试题总结,大家感受一下(点此链接了解: 星球):

使用场景

场景一:电商价格引擎

电商的价格计算通常涉及多个维度:原价、会员折扣、优惠券、满减活动、店铺优惠等。用 LiteFlow 可以把每个计算因子拆成独立组件,用规则灵活组合。

规则示例

<chain name="priceChain"> THEN( getBasePrice, WHEN( memberDiscount, couponDiscount, activityDiscount ), finalPrice, savePrice ); </chain>

好处是:新增一种优惠类型,只需要加一个组件,然后在规则里配上位置,不用改现有代码。

场景二:复杂审批流程

LiteFlow 不做"基于角色的审批流转"(那是 Flowable、Flowlong 这类工作流引擎的事),但它适合处理审批环节里的业务逻辑

比如一个采购审批,需要:

  1. 校验采购金额是否超预算
  2. 并行查询供应商库存和价格
  3. 根据金额走不同的风控规则
  4. 生成采购单

这些逻辑用 LiteFlow 编排,比写在 Service 里要清晰。

场景三:数据清洗 ETL

数据处理场景里,经常有多个清洗步骤:去重、格式转换、数据补全、质量检查。用 LiteFlow 可以把这些步骤组件化,根据不同数据源配置不同规则。

场景四:实时风控决策

风控规则变化频繁,用脚本组件 + 规则热部署,可以在不停机的情况下调整规则。比如:"最近欺诈多了,把某类交易的阈值从 1000 降到 500",改一下脚本配置就行。

EL 规则语法

LiteFlow 的 EL 语法是其核心竞争力,十分钟就能上手,但能编排出非常复杂的流程。

基本语法

串行(THEN/SER):按顺序执行

THEN(a, b, c, d) <!-- 或者用语义更明确的 SER --> SER(a, b, c, d)

并行(WHEN/PAR):同时执行

WHEN(a, b, c) <!-- 或者用 PAR --> PAR(a, b, c)

嵌套组合

THEN( a, WHEN(b, THEN(c, d)), e )

规则含义:先执行 a → 然后并行执行 b 和"先 c 后 d" → 最后执行 e。

高级特性

忽略错误(ignoreError)

THEN( a, WHEN(b, c, d).ignoreError(true), e )

即使 b、c、d 中有组件报错,e 仍会执行。

任一完成则继续(any)

THEN( a, WHEN(b, c, d).any(true), e )

b、c、d 中任何一个先完成,就忽略其他继续往下走。

指定必须等待的节点(must)

WHEN(b, c, d).must(b, c)

b、c 必须等执行完,d 如果还没完就忽略。

按比例完成(percentage)

WHEN(a, b, c, d, e).percentage(0.6)

5 个组件里随机执行 3 个(5 × 0.6 = 3),完成就继续。

不适合什么场景?

  • 审批流转:LiteFlow 只做基于逻辑的流转,不做基于角色任务的流转。如果要实现"A 审批完传给 B,B 审批完传给 C"这类场景,应该用 Flowable 或 Flowlong。
  • 简单业务:如果一个流程只有 2-3 个步骤,且基本不会变,上规则引擎可能有点杀鸡用牛刀。
  • 超大规模并行计算:如果并行组件达到成百上千个,且涉及极其复杂的线程调度,LiteFlow 虽然能做,但它更偏向业务流程编排,而非大数据分布式计算引擎(如 Spark/Flink)。

与其他方案对比

对比维度LiteFlow自己写 if-elseFlowable/Flowlong
学习曲线低(EL 语法简单)最低(原生 Java)中(需理解 BPMN)
流程灵活性高(规则驱动)低(硬编码)中(需重新部署)
热部署✅ 支持❌ 需要发版✅ 支持
脚本支持✅ 多种语言❌ 无⚠️ 有限支持
适用场景复杂业务逻辑编排简单流程审批流转
性能高(8.6 万+ TPS)取决于实现中(有状态机开销)
国产支持✅ 国产N/A⚠️ Flowlong 国产

总结

LiteFlow 把复杂业务逻辑从"面条代码"变成了"搭积木",改流程不再动全身,尤其适合那些业务规则频繁变化、步骤多且有并行需求的系统。

脚本组件性能:v2.15.3 版本把 Java 脚本编译速度提升了200 倍,主要是因为该版本对 Liquor 批量编译特性的支持。Liquor 是一款源自 Arthas 核心、支持 "jar in jar" 且轻量的 Java 动态编译与脚本工具,能让开发者在运行时以接近原生的性能灵活执行 Java 代码。

适合人群

  • 饱受if-else嵌套困扰的后端开发者
  • 需要频繁调整业务流程的系统(电商、金融、风控)
  • 想把业务逻辑从代码里剥离出来的架构师

使用建议

  • 先从一个简单的流程开始,别一上来就搞最复杂的
  • 组件拆分要合理:每个组件只做一件事,做好一件事
  • 规则文件记得做版本管理,出了问题好回滚
  • 如果用脚本组件,建议用 Java 脚本(liteflow-script-javax-pro),性能最好

Gitee 地址:https://gitee.com/dromara/liteFlow

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 18:57:16

ESXi 虚拟化详解

ESXi 虚拟化详解 ESXi 是 VMware 推出的企业级 Type-1&#xff08;裸金属&#xff09;虚拟化管理程序&#xff08;Hypervisor&#xff09;&#xff0c;直接安装在物理服务器上&#xff0c;不依赖底层通用操作系统。它通过 VMkernel 对 CPU、内存、存储、网络等资源进行调度与管…

作者头像 李华
网站建设 2026/4/25 0:29:17

C++之纯虚函数和抽象类

文章目录纯虚函数抽象类纯虚函数 如果一个虚函数仅表达抽象的行为&#xff0c;没有具体的功能&#xff0c;即只有声明没有定义&#xff0c;这样的虚函数被称为纯虚函数或抽象方法 class 类名 { public:virtual 返回类型 函数名 (形参表) 0; };假设有图形类Figure, 设计计算面…

作者头像 李华
网站建设 2026/4/18 5:31:30

方盾防毒口罩:化工喷漆作业的呼吸安全保障

在化工喷漆作业现场&#xff0c;刺鼻气味常常弥漫于空气中。许多作业人员误以为“习惯就好”&#xff0c;从而忽视了佩戴防毒口罩的重要性。殊不知&#xff0c;这些看似平常的喷漆烟雾中&#xff0c;隐匿着多种对人体有害的物质。长期暴露其中&#xff0c;极有可能引发严重的健…

作者头像 李华
网站建设 2026/4/18 7:00:31

零基础如何学网络安全?超详细攻略,带你从入门到精通

一、学习建议 1.了解基础概念&#xff1a; 开始之前&#xff0c;了解网络安全的基本概念和术语是很重要的。你可以查找网络安全入门教程或在线课程&#xff0c;了解网络安全领域的基本概念&#xff0c;如黑客、漏洞、攻击类型等。 2.网络基础知识&#xff1a; 学习计算机网…

作者头像 李华