文章目录
- 1 规则引擎概述
- 1.1什么是规则引擎
- 1.2规则引擎的优势
- 1.3规则引擎的适用场景
- 1.4相关概念
- 2 Drools
- 2.1介绍
- 2.2构成
- 2.3使用
- 2.4API开发步骤
用传统方式编写规则的缺点:
- 难以维护
- 难以应对规则变化
- 修改代码后重启服务才能生效
1 规则引擎概述
1.1什么是规则引擎
- 全称业务规则管理系统(BRMS)
- 主要思想:将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。
- 规则引擎不是框架,是一类系统,常见的规则引擎有drools、VisualRules、iLog等
- 规则引擎实现了将业务从应用程序中分离出来,接受数据输入,解释业务规则,并根据业务规则作出业务决策。规则引擎实际就是一个输入输出平台。
1.2规则引擎的优势
- 业务规则与系统代码分离,实现业务规则的集中管理
- 在不重启服务的情况下可随时对业务规则进行扩展和维护
- 可以动态修改业务规则,快速响应需求变更
- 规则引擎是相对独立的,只关心业务规则,使得业务分析人员也可以参与编辑、维护系统的业务规则
- 减少了硬编码业务规则的成本和风险
- 使用规则引擎提供的规则编辑工具,使复杂的业务规则实现变得的简单
1.3规则引擎的适用场景
存在比较复杂的业务规则并且业务规则会频繁变动的系统,如:风险控制系统(风险贷款、风险评估)、反欺诈项目(银行贷款、征信验证)、决策平台系统(财务计算)、促销平台系统(满减、打折、加价购)
1.4相关概念
- Working Memory:工作内存,drools规则引擎会从Working Memory中获取数据并和规则文件中定义的规则进行模式匹配,所以开发的应用程序只需要将数据插入到Working Memory中即可,例如Drools入门案例中调用kieSession.insert(order)就是将order对象插入到了工作内存中。
- Fact:事实,是指在drools 规则应用当中,将一个普通的JavaBean插入到Working Memory后的对象就是Fact对象,例如Drools入门案例中的Order对象就属于Fact对象。Fact对象是应用和规则引擎进行数据交互的桥梁或通道。
- Rule Base:规则库,在规则文件中定义的规则都会被加载到规则库中。
- Pattern Matcher:匹配器,将Rule Base中的所有规则与Working Memory中的Fact对象进行模式匹配,匹配成功的规则将被激活并放入Agenda中。
- Agenda:议程,用于存放通过匹配器进行模式匹配后被激活的规则。
- Execution Engine:执行引擎,执行Agenda中被激活的规则。
2 Drools
2.1介绍
由JBoss组织提供的基于Java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件或特定的存储介质中(如数据库),使得业务规则的变更不需要修改项目代码、重启服务器就可以在线上环境立即生效。
drools官网地址:https://drools.org/
drools源码下载地址:https://github.com/kiegroup/drools
2.2构成
drools规则引擎由以下三部分构成:
- Working Memory(工作内存)
- Rule Base(规则库)
- Inference Engine(推理引擎)
其中Inference Engine(推理引擎)又包括:
- Pattern Matcher(匹配器):把事实对象和规则相匹配
- Agenda(议程):存放匹配成功将要执行的规则
- Execution Engine(执行引擎)
2.3使用
- 单独使用:导入以下maven坐标即可
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>7.6.0.Final</version>
</dependency>
如果使用IDEA开发drools应用,IDEA中已经集成了drools插件。如果使用eclipse开发drools应用还需要单独安装drools插件。
- 整合spring使用
2.4API开发步骤
获取KieServices–>获取KieContainer–>KieSession–>Insert fact–>触发规则–>关闭KieSession