Drools是一款基于Java的开源规则引擎,将规则与业务代码解耦。规则以脚本的形式存储在一个文件中,使规则的变化不需要修改代码,重新启动机器即可在线上环境中生效。
规则引擎实现了业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入、解释业务规则,以及基于业务规则做出业务决策,从而提供极大的编程便利。
-
规则引擎核心思想:将应用程序中的业务决策部分分离出来
-
使得业务规则的变更不需要修改项目代码、重启服务器就可以在线上环境立即生效
Drools规则引擎可以应用于许多不同的场景,以下是一些常见的使用场景:
- 业务规则管理:Drools可以帮助组织和管理大量的业务规则,从而提高业务规则的可维护性和灵活性。
- 金融风控:Drools可以帮助金融机构自动化执行风险评估和合规性检查,以确保符合监管要求。
- 电子商务:Drools可以帮助电子商务网站根据客户的行为和偏好自动化推荐产品。
- 物流管理:Drools可以帮助物流公司根据货物类型、目的地和运输方式自动化计算运费和路线。
- 游戏开发:Drools可以帮助游戏开发人员自动化处理游戏规则和事件。
drools规则引擎由以下三部分构成:
-
Working Memory(工作内存)
-
Rule Base(规则库)
-
Inference Engine(推理引擎)
其中Inference Engine(推理引擎)又包括:
-
Pattern Matcher(匹配器) 具体匹配哪一个规则,由这个完成
-
Agenda(议程)
-
Execution Engine(执行引擎)
四. Drools基础语法
1. 规则文件组成
在使用Drools时非常重要的一个工作就是编写规则文件,通常规则文件的后缀为.drl
2. 规则体语法结构
规则体语法结构 开始位置 rule,结束位置 end
rule:关键字,表示规则开始,参数为规则的唯一名称。
attributes:规则属性,是rule与when之间的参数,为可选项。
when:关键字,后面跟规则的条件部分。
LHS(Left Hand Side):是规则的条件部分的通用名称。它由零个或多个条件元素组成。如果LHS为空,则它将被视为始终为true的条件元素。 (左手边)
then:关键字,后面跟规则的结果部分。
RHS(Right Hand Side):是规则的后果或行动部分的通用名称。 (右手边)
end:关键字,表示一个规则结束。
3. 模式匹配
4. Drools内置方法
Drools提供了一些方法可以用来操作工作内存中的数据,操作完成后规则引擎会重新进行相关规则的匹配,原来没有匹配成功的规则在我们修改数据完成后有可能就会匹配成功了。
1> 修改 update方法
update方法的作用是更新工作内存中的数据,并 让相关的规则重新匹配。
参数:
规则:
测试会输出俩条成功匹配到一和二的输出信息,积分为100
2> 添加 insert方法
insert方法的作用是向工作内存中插入数据,并让相关的规则重新匹配
最后会输出俩条规则,但是积分为0
3> 删除 retract方法
retract方法的作用是删除工作内存中的数据,并让相关的规则重新匹配。
结果为匹配到规则二,积分为0
5. Drools规则属性
1> salience属性
-
salience属性用于指定规则的执行优先级,取值类型为Integer。数值越大越优先执行
-
没有添加执行优先级,执行由上到下执行
-
添加优先级
2> no-loop属性
-
no-loop属性用于防止死循环
6. Drools高级语法
-
global关键字用于在规则文件中定义全局变量,它可以让应用程序的对象在规则文件中能够被访问。
-
语法结构为:global 对象类型 对象名称
测试
Drools是一种规则引擎,它允许用户通过定义规则来管理和执行业务规则。主要功能和作用包括:
-
规则管理:Drools提供了一个规则编辑器和存储库,允许用户定义和管理业务规则。用户可以使用规则编辑器创建规则,并将它们保存在规则库中进行集中管理。这样可以方便地修改、更新和删除规则。
-
规则评估:Drools允许用户将规则与传入的数据进行匹配和评估。用户可以通过定义规则的条件和动作来描述规则的行为。当传入的数据满足规则的条件时,规则引擎将执行规则的动作。
-
决策支持:Drools可以帮助用户进行决策支持,通过评估和执行规则来生成决策结果。用户可以定义一组规则来描述不同的决策情况,并根据传入的数据来决定执行哪个规则。
-
业务流程管理:Drools还提供了一种业务流程管理的功能,允许用户定义和管理业务流程。用户可以使用规则来定义业务流程的各个步骤和条件,并根据传入的数据来执行相应的流程步骤。