开源规则引擎对比
Drools | easy-rules | liteflow | |
---|---|---|---|
规则格式 | xml | json、yml、注解、builder | xml、json、yml、注解、builder |
表达式 | 支持 | MVEL、SpEL、JEXL | 通过脚本支持 |
循环 | 支持 | 支持 | 不支持 |
条件 | 支持 | 支持 | 支持 |
可视化 | 支持 | 可自行实现 | 可自行实现 |
热更新 | 支持 | 可自行实现 | 支持 |
生态 | 完善 | 一般 | 一般 |
文档 | 多 | 一般 | 一般 |
备注 | 成熟,相关组件多,需要编写xml规则文件,学习成本高 | 较成熟,基于注解的编程模型,学习成本低,但不活跃 | 自研规则表达式,学习成本较低,有断更风险 |
为什么需要
当规则复杂且分支较多,难以应对变化,难以维护,不能及时生效,需要重启服务
https://www.cnblogs.com/dalianpai/p/14759526.html
Drools
Drools 是用 Java 语言编写的开放源码规则引擎,基于Apache协议,基于RETE算法,功能强大,老牌规则引擎,生态完善,但太重了。
- Drools相关的组件太多,需要逐个研究才知道是否需要
- Drools逻辑复杂,不了解原理,一旦出现问题排查难度高
- Drools需要编写规则文件,学习成本高
rule rule_001
when
$p:Person(name=="张三",birthday=="1987-07-24");
then
$p.setName("李四");
update($p);
System.out.println("执行了 name==\"张三\",birthday==\"1987-07-24\" 规则");
System.out.println("改完后的名字:"+$p.getName());
end
Easy Rules
轻量级的java规则引擎,学习成本低,代码优雅,但2年前停止维护
- 轻量级框架和易于学习的API
- 基于POJO的开发与注解的编程模型
- 定义抽象的业务规则并轻松应用它们
- 支持从简单规则创建组合规则的能力
- 支持使用表达式语言(如MVEL和SpEL)定义规则的能力
Rule ageRule = new MVELRule()
.name("age rule")
.description("Check if person's age is > 18 and marks the person as adult")
.priority(1)
.when("person.age > 18")
.then("person.setAdult(true);");
https://github.com/j-easy/easy-rules/wiki/fizz-buzz
liteflow
国产组件式规则引擎框架,但比较年轻。
- 规则文件格式丰富
- 支持脚本语言
- 热刷新
- 支持重试
- 声明式组件
<chain name="chain1">
THEN(
a,
WHEN(
b,
SWITCH(c).to(d,e)
),
f
);
</chain>
https://liteflow.yomahub.com/