规则引擎入门:概念、对比与实战场景

规则引擎这东西,说白了就是一套把业务逻辑从代码里抽出来的工具。我早年做金融风控系统时,业务方三天两头改规则——今天说“交易金额超过5万要人工审核”,明天改成“超过3万就行”。每次改代码、发版、重启,累得够呛。后来用了规则引擎,业务自己改配置,世界清净了。

规则引擎是什么?

规则引擎的核心思想很简单:把“判断逻辑”和“执行代码”分开。你定义一堆规则,引擎帮你匹配输入数据,然后告诉你该做什么。

举个例子:

规则:如果 用户年龄 > 18 且 会员等级 == "VIP"
     则 给予 8折优惠

传统做法是写if-else。规则引擎的做法是——你把这条规则写成配置文件或数据库记录,引擎自动解析、匹配、执行。

核心三要素:

  • 规则库:存放所有业务规则的地方
  • 工作内存:存放待匹配的事实(数据)
  • 推理引擎:负责匹配规则和执行动作

我个人习惯把规则引擎想象成一个“智能裁判”。你给它事实(比如用户信息、订单数据),它根据规则库里的条款,告诉你判决结果。

Drools vs EasyRules:两个流派

市面上规则引擎不少,但最常被拿来对比的就是Drools和EasyRules。我两个都用过,说说真实感受。

对比维度 Drools EasyRules
定位 企业级重型引擎 轻量级嵌入式引擎
规则语言 DRL(专用语法) 注解 + Java表达式
推理机制 Rete算法(高效模式匹配) 简单顺序匹配
学习成本 高(需要学DRL语法) 低(会Java就能用)
性能 适合大量规则(万级) 适合少量规则(百级)
集成难度 较重,依赖多 轻量,无额外依赖

你看,这俩完全不是一个量级的东西。Drools像瑞士军刀,功能强大但上手慢;EasyRules像一把小折刀,简单直接。

Drools实战片段

我记得第一次用Drools时,被DRL语法折腾得不轻。但熟悉后确实强大:

// 文件: discount.drl
package com.example.rules

import com.example.model.Order

rule "VIP用户折扣"
    when
        $o: Order(amount > 1000, memberLevel == "VIP")
    then
        $o.setDiscount(0.8);
        System.out.println("VIP用户享受8折");
end

这里有个坑——DRL文件必须放在resources目录下,而且包名要和Java类对应。我曾经因为包名写错,排查了半天。

EasyRules实战片段

EasyRules就亲民多了。用注解就能定义规则:

@Rule(name = "VIP折扣规则", description = "VIP用户满1000打8折")
public class VipDiscountRule {

    @Condition
    public boolean check(@Fact("order") Order order) {
        return order.getAmount() > 1000 
               && "VIP".equals(order.getMemberLevel());
    }

    @Action
    public void execute(@Fact("order") Order order) {
        order.setDiscount(0.8);
        System.out.println("VIP用户享受8折");
    }
}

调用起来也简单:

RulesEngine engine = new RulesEngineBuilder()
    .withRule(new VipDiscountRule())
    .build();

engine.fire(new Facts().put("order", order));

我的建议:

如果规则数量少于50条,团队Java基础好,选EasyRules。如果规则上千,需要复杂的推理(比如连锁反应、优先级冲突解决),选Drools。

规则引擎的适用场景

不是所有地方都需要规则引擎。我见过有人为了“优雅”硬上规则引擎,结果把简单问题搞复杂了。到底什么时候该用?

典型场景一:频繁变动的业务规则

比如电商促销活动。今天满减,明天打折,后天送券。用规则引擎,运营人员改配置就行,不用等开发排期。

典型场景二:复杂决策逻辑

信贷审批、保险核保、医疗诊断。这些场景规则多、条件交叉、优先级复杂。用规则引擎能清晰管理。

典型场景三:合规与监管

金融行业经常要应对监管变化。规则引擎让合规人员直接维护规则,审计也方便——每条规则都有版本记录。

典型场景四:风控系统

我在做支付风控时,规则引擎是核心。交易金额、设备指纹、IP地址、历史行为……几十条规则同时跑,引擎能快速给出风险评分。

避坑指南:

我曾经在一个项目里,把简单的状态机用Drools实现,结果规则写了300行,性能还差。后来换成枚举+策略模式,代码量减到50行。记住:规则引擎不是银弹。如果规则能用简单的if-else或策略模式搞定,就别上引擎。

知识体系总览

下面这张图,把本章的核心脉络串起来了:

规则引擎知识体系 规则引擎核心 规则库 工作内存 推理引擎 Drools(企业级重型) EasyRules(轻量级) 业务规则频繁变动 复杂决策逻辑 合规与监管 风控系统 ⚠ 不是银弹:简单逻辑用if-else,别硬上引擎

嗯,这张图把本章的核心脉络串起来了。从规则引擎的三个核心要素出发,到两个主流引擎的对比,再到四个典型适用场景。最后那个黄色提示框,是我踩过坑后的真心话。

小结

规则引擎不是什么神秘技术。它就是把if-else从代码里搬到了配置文件里。选型时记住:简单场景用EasyRules,复杂场景用Drools。别为了技术而技术,业务才是王道。