什么是规则引擎
规则引擎就是提供一种可选的计算模型,与通常的命令式模型(由带有条件和循环的命令依次组成)不同,规则引擎基于生产规则系统。这是一组生产规则,每条规则都有一个条件(condition)和一个动作(action),简单来说,可以看作一组if-then语句。
精妙之处在于规则可以按任何顺序编码,引擎会决定何时使用对顺序有意义的任何方式来计算它们,就达到了自由组合,解耦合的特型。
easy-rules规则引擎
源码地址:https://github.com/taotao419/easyrules
easy rules的特点
-
轻量级库和易于学习的API
-
基于POJO的注解编程模型开发
-
基于mvel表达式的编程模型
-
支持根据简单的规则创建组合规则
- 方便且适用于java的抽象的业务模型规则
easy-rules案例说明
基于maven引入
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-rules-core</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-rules-support</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-rules-mvel</artifactId>
<version>4.1.1</version>
</dependency>
定义规则
大多数业务规则可以用以下定义表示:
-
Name : 一个命名空间下的唯一的规则名称
-
Description : 规则的简要描述
-
Priority : 相对于其他规则的优先级
-
Facts : 事实,可立即为要处理的数据
-
Conditions : 为了应用规则而必须满足的一组条件
-
Actions : 当条件满足时执行的一组动作
核心类说明
接口:Condition 判断是否满足规则条件
接口:Action 执行具体规则
入门代码案例
java代码实现
package org.jeasy.rules.tutorials.airco;
import org.jeasy.rules.api.Facts;
import org.jeasy.rules.api.Rule;
import org.jeasy.rules.api.Rules;
import org.jeasy.rules.api.RulesEngine;
import org.jeasy.rules.core.DefaultRulesEngine;
import org.jeasy.rules.core.InferenceRulesEngine;
import org.jeasy.rules.core.RuleBuilder;
/**
* 例子:温度大于25度就需要开空调降温,小于25度就关空调
*/
pub