这 5 种规则引擎,真香!

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

👉这是一个或许对你有用的开源项目

国产Star破10w的开源项目,前端包括管理后台、微信小程序,后端支持单体、微服务架构

RBAC权限、数据权限、SaaS多租户、商城、支付、工作流、大屏报表、ERP、CRMAI大模型、IoT物联网等功能:

  • 多模块:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • 微服务:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK17/21+SpringBoot3、JDK8/11+Spring Boot2双版本 

来源:苏三说技术


前言

核心痛点 :业务规则高频变更与系统稳定性之间的矛盾

想象一个电商促销场景:

// 传统硬编码方式(噩梦开始...)
public BigDecimal calculateDiscount(Order order) {
    BigDecimal discount = BigDecimal.ZERO;
    
    if (order.getTotalAmount().compareTo(new BigDecimal("100")) >= 0) {
        discount = discount.add(new BigDecimal("10"));
    }
    
    if (order.getUser().isVip()) {
        discount = discount.add(new BigDecimal("5"));
    }
    
    // 更多if-else嵌套...
    return discount;
}

当规则变成 :"非VIP用户满200减30,VIP用户满150减40,且周二全场额外95折"时,代码将陷入维护地狱!

规则引擎通过分离规则逻辑 解决这个问题:

  1. 规则外置存储(数据库/文件)

  2. 支持动态加载

  3. 声明式规则语法

  4. 独立执行环境

下面给大家分享5种常用的规则引擎,希望对你会有所帮助。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

1.五大常用规则引擎

1.1 Drools:企业级规则引擎扛把子

官网 :https://www.drools.org/

适用场景:
  • 金融风控规则(上百条复杂规则)

  • 保险理赔计算

  • 电商促销体系

实战:折扣规则配置
// 规则文件 discount.drl
rule "VIP用户满100减20"
    when
        $user: User(level == "VIP")
        $order: Order(amount > 100)
    then
        $order.addDiscount(20);
end
Java调用代码:
KieServices kieServices = KieServices.Factory.get();
KieContainer kContainer = kieServices.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("discountSession");

kSession.insert(user);
kSession.insert(order);
kSession.fireAllRules();

优点 :

  • 完整的RETE算法实现

  • 支持复杂的规则网络

  • 完善的监控管理控制台

缺点 :

  • 学习曲线陡峭

  • 内存消耗较大

  • 需要依赖Kie容器

适合:不差钱的大厂,规则复杂度高的场景

1.2 Easy Rules:轻量级规则引擎之王

官网 :https://github.com/j-easy/easy-rules

适用场景:
  • 参数校验

  • 简单风控规则

  • 审批流引擎

注解式开发:
@Rule(name = "雨天打折规则", description = "下雨天全场9折")
public class RainDiscountRule {

    @Condition
    public boolean when(@Fact("weather") String weather) {
        return "rainy".equals(weather);
    }
    
    @Action
    public void then(@Fact("order") Order order) {
        order.setDiscount(0.9);
    }
}
引擎执行:
RulesEngineParameters params = new RulesEngineParameters()
    .skipOnFirstAppliedRule(true); // 匹配即停止

RulesEngine engine = new DefaultRulesEngine(params);
engine.fire(rules, facts);

优点 :

  • 五分钟上手

  • 零第三方依赖

  • 支持规则组合

缺点 :

  • 不支持复杂规则链

  • 缺少可视化界面

适合:中小项目快速落地,开发人员不足时

1.3 QLExpress:阿里系脚本引擎之光

官网 :https://github.com/alibaba/QLExpress

适用场景:
  • 动态配置计算逻辑

  • 财务公式计算

  • 营销规则灵活变更

执行动态脚本:
ExpressRunner runner = new ExpressRunner();
DefaultContext<String, Object> context = new DefaultContext<>();
context.put("user", user);
context.put("order", order);

String express = "if (user.level == 'VIP') { order.discount = 0.85; }";
runner.execute(express, context, null, true, false);
高级特性:
// 1. 函数扩展
runner.addFunction("计算税费", new Operator() {
    @Override
    public Object execute(Object[] list) {
        return (Double)list[0] * 0.06;
    }
});

// 2. 宏定义
runner.addMacro("是否新用户", "user.regDays < 30");

优点 :

  • 脚本热更新

  • 语法接近Java

  • 完善的沙箱安全

缺点 :

  • 调试困难

  • 复杂规则可读性差

适合:需要频繁修改规则的业务(如运营活动)

1.4 Aviator:高性能表达式专家

官网 :https://github.com/killme2008/aviatorscript

适用场景:
  • 实时定价引擎

  • 风控指标计算

  • 大数据字段加工

性能对比(执行10万次):
// Aviator 表达式
Expression exp = AviatorEvaluator.compile("user.age > 18 && order.amount > 100");
exp.execute(map);

// Groovy 脚本
new GroovyShell().evaluate("user.age > 18 && order.amount > 100");

引擎

耗时

Aviator

220ms

Groovy

1850ms

编译优化:
// 开启编译缓存(默认开启)
AviatorEvaluator.getInstance().useLRUExpressionCache(1000);

// 字节码生成模式(JDK8+)
AviatorEvaluator.setOption(Options.ASM, true);

优点 :

  • 性能碾压同类引擎

  • 支持字节码生成

  • 轻量无依赖

缺点 :

  • 只支持表达式

  • 不支持流程控制

适合:对性能有极致要求的计算场景

1.5 LiteFlow:规则编排新物种

官网:https://liteflow.com/

适用场景:
  • 复杂业务流程

  • 订单状态机

  • 审核工作流

编排示例:
<chain name="orderProcess">
    <then value="checkStock,checkCredit"/> <!-- 并行执行 -->
    <when value="isVipUser"> 
        <then value="vipDiscount"/> 
    </when>
    <otherwise>
        <then value="normalDiscount"/>
    </otherwise>
    <then value="saveOrder"/>
</chain>
Java调用:
LiteflowResponse response = FlowExecutor.execute2Resp("orderProcess", order, User.class);
if (response.isSuccess()) {
    System.out.println("流程执行成功");
} else {
    System.out.println("失败原因:" + response.getCause());
}

优点 :

  • 可视化流程编排

  • 支持异步、并行、条件分支

  • 热更新规则

缺点 :

  • 新框架文档较少

  • 社区生态待完善

适合:需要灵活编排的复杂业务流

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

2 五大规则引擎横向评测

性能压测数据(单机1万次执行):

引擎

耗时

内存占用

特点

Drools

420ms

功能全面

Easy Rules

38ms

轻量易用

QLExpress

65ms

阿里系脚本引擎

Aviator

28ms

极低

高性能表达式

LiteFlow

120ms

流程编排专家

3 如何技术选型?

黄金法则:
  1. 简单场景 :EasyRules + Aviator 组合拳

  2. 金融风控 :Drools 稳如老狗

  3. 电商运营 :QLExpress 灵活应变

  4. 工作流驱动 :LiteFlow 未来可期

4 避坑指南

  1. Drools内存溢出

// 设置无状态会话(避免内存积累)
KieSession session = kContainer.newStatelessKieSession();
  1. QLExpress安全漏洞

// 禁用危险方法
runner.addFunctionOfServiceMethod("exit", System.class, "exit", null, null);
  1. 规则冲突检测

// Drools冲突处理策略
KieSessionConfiguration config = KieServices.Factory.get().newKieSessionConfiguration();
config.setProperty("drools.sequential", "true"); // 按顺序执行

总结

  1. 能用 :替换if/else(新手村)

  2. 用好 :规则热更新+可视化(进阶)

  3. 用精 :规则编排+性能优化(大师级)

曾有人问我:“规则引擎会不会让程序员失业?” 我的回答是:“工具永远淘汰不了思考者,只会淘汰手工作坊” 。

真正的高手,不是写更多代码,而是用更优雅的方式解决问题。


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
年医学方向科技核心期刊!真香!录用率高!审稿快!没基金课题也能发! 图片 点击蓝字 关注我们 图片 图片 图片 杂志简介 《实用老年医学》 主办单位:江苏省老年医学研究所 出版周期:月刊 ISSN:1003-9198 CN:32-1338/R 创刊时间:1986 复合影响因子:1.204 综合影响因子:0.924 期刊多次获得江苏省、华东地区、全国优秀科技期刊奖,并被中国科技部评为中国科技论文统计源期刊,中国科技核心期刊。已被美国化学文摘(CA)和波兰哥白尼索引(IC)收录。 图片 图片 图1 图片 图片 图2 图片 图片 图3 图片 投稿经验 从图1可以看出该杂志2024年度一共收了296篇文章,2025年截止今天也已经收录了117篇文章;证明该杂志效率高,审稿快,周期短。从图2可以看出该杂志2024年度基金助文量为187篇,占比率是63%左右,且2025年目前为止的基金占比率是64%左右;证明该杂志没有基金也能投。从图3可以看出该杂志近十年临床研究栏目的收稿量最多。《实用老年医学》报道老年医学领域领先的科研成果和临床诊疗经验,以及对老年医学临床有指导作用、且与老年医学临床密切结合的基础理论研究。主要内容有老年医学的基础理论、临床医疗、预防保健、及流行病学等方面的论著、基础与临床、讲座综述、经验交流、护理园地、病例报告等。审稿周期以1-3个月为基准;期刊编辑团队以高效负责著称,多数延迟源于不可控因素(如审稿人调度),耐心配合修改是成功关键。 图片 图片 图片 杂志简介 《老年医学与保健》 基本信息 主办单位:华东医院;复旦大学附属华东医院 出版周期:双月 ISSN:1008-8296 CN:31-1798/R 邮发代号:4-671 创刊时间:1995 复合影响因子:1.202 综合影响因子:0.942 现为中国科技核心期刊(中国科技论文统计源期刊)、中国学术期刊综合评价数据库统计源期刊,被国内外多个检索机构和数据库收录,如《中国核心期刊(遴选)数据库》、中文生物医学期刊文献数据库(CMCC)、美国《化学文摘》(CA)数据库、波兰《哥白尼索引(IC)》、《日本科学技术振兴机构中国文献数据库(JST)》,并入选“复旦大学学位与研究生教育国内期刊指导目录(医刊)”A目录期刊。 图片 图片 图4 图片 图片 图5 图片 图片 图6 图片 投稿经验 从图4可以看出该杂志2024年度的收稿量为356篇文章,到今天为止该杂志2025年的收稿量为126篇;证明该杂志不仅收稿量大,文章上线速度也快,杂志社效率高,周期短。从图5可以看出该杂志2024年度基金助文量为202篇56%左右,且2025年目前为止的占比率是61%左右;证明该杂志不需要课题基金也能发。从图6可以看出该杂志近十年里论著栏目的收稿量最多。《老年医学与保健》主要报道老年医学在基础研究、临床研究、中西医结合等方面的最新研究成果与重大进展动向等。设有述评、专家论坛、论著、病例报道、综述等多个栏目,每期侧重一个主题,报道内容涵盖广泛,且刊出时滞短,力求与时俱进、精益求精,确保读者能够及时获取最新的学术成果、前沿动态与热点。审稿周期集中在 1-3个月左右。效率受稿件质量、外审专家、基金支持等因素影响,建议作者严格遵循投稿指南,并主动跟进流程以优化时间。
最新发布
06-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值