一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
大家好,我是 Guide。今天来推荐一款非常优秀的国产规则引擎,说不定你曾经就用过。下面是正文。你有没有接过那种祖传代码?一个几千行的 if-else 堡垒,改一行逻辑,要测半天。更糟的是,业务方今天说要"先 A 后 B",明天又改成"A 和 B 并行,等 C 完成再接 D",每次改流程都要重构代码。
LiteFlow 是一个国产规则引擎,专门解决"业务逻辑耦合"问题。它把瀑布流式的代码拆成一个个独立组件,用一套 DSL 语法重新编排,改流程就像搭积木。
https://img2024.cnblogs.com/blog/1843652/202602/1843652-20260209141015176-767746415.png
解决了什么问题?
传统复杂业务系统的痛点:
[*]改一处动全身:代码里到处是硬编码的流程判断,改个顺序要改好几个地方。
[*]难以热变更:业务流程调整需要重新发版,没法实时生效。
[*]组件复用难:每个业务场景都写一套逻辑,同样的代码在到处复制。
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 版本 提升幅度 编译阶段 TPS 2,739 ops 3,636 ops 提升 32% 上下文参数注入 55,826 ops 222,625 ops 提升 300% 数据来源:LiteFlow 官方压测报告,采用 benchmark 框架,2 次预热、3 次执行取平均值。
QLExpress 是由阿里巴巴开源的轻量级动态脚本引擎,目标是将业务逻辑从繁重的 Java 代码中解耦,变成可以动态执行的脚本。
LiteFlow 在今年的 Gitee 年度开源项目评选中获得了基础软件赛道第二名的成绩。
快速上手
安装
com.yomahub liteflow-spring-boot-starter 2.15.3 LiteFlow 支持 JDK 8 ~ JDK 25 全版本,但如果你用 JDK 9+,建议直接上 v2.15.0+ 版本,无需额外配置 JVM 参数。
配置规则文件
在 application.properties 里指定规则文件位置:
liteflow.rule-source=config/flow.el.xml 然后在 resources/config/flow.el.xml 定义规则 THEN(validateOrder, WHEN(checkStock, calcPrice), riskCheck, saveOrder);:
THEN( validateOrder, WHEN(checkStock, calcPrice), riskCheck, saveOrder ); 这段表达式定义了执行的拓扑结构:
[*]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() 分享、互助 让互联网精神温暖你我 懂技术并乐意极积无私分享的人越来越少。珍惜 谢谢分享,试用一下 谢谢分享,试用一下 这个有用。 谢谢分享,辛苦了 感谢发布原创作品,程序园因你更精彩 前排留名,哈哈哈 东西不错很实用谢谢分享 分享、互助 让互联网精神温暖你我 这个有用。 这个有用。 东西不错很实用谢谢分享 热心回复! 这个好,看起来很实用 感谢,下载保存了 感谢分享,学习下。 感谢分享,下载保存了,貌似很强大 谢谢楼主提供!
页:
[1]