drools规则引擎介绍

1 什么是规则引擎

规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。

需要注意的是规则引擎并不是一个具体的技术框架,而是指的一类系统,即业务规则管理系统。目前市面上具体的规则引擎产品有:drools、VisualRules、iLog等。

规则引擎实现了将业务决策从应用程序代码中分离出来,接收数据输入,解释业务规则,并根据业务规则做出业务决策。规则引擎其实就是一个输入输出平台。

例如通过如下代码来检查用户信息合法性:

复制代码
//此处为伪代码`

`//检查用户信息合法性,返回true表示检查通过,返回false表示检查不通过`
`public boolean checkUser(User user){`
    `//如果申请人既没房也没车,同时学历为大专以下,并且月薪少于5000,那么不通过`
    `if(user.getHouse()` `==` `null` 
       `&& user.getcar()` `==` `null` 
       `&& user.getEducation().equals("大专以下")` 
       `&& user.getSalary <` `5000){`
        `return` `false;`
    `}`
    `//如果申请人既没房也没车,同时学历为大专或本科,并且月薪少于3000,那么不通过`
    `else` `if(user.getHouse()` `==` `null` 
       `&& user.getcar()` `==` `null` 
       `&& user.getEducation().equals("大专或本科")` 
       `&& user.getSalary <` `3000){`
        `return` `false;`
    `}`
    `//如果申请人既没房也没车,同时学历为本科以上,并且月薪少于2000,同时之前没有信用卡的,那么不通过`
    `else` `if(user.getHouse()` `==` `null` 
       `&& user.getcar()` `==` `null` 
       `&& user.getEducation().equals("本科以上")` 
       `&& user.getSalary <` `2000` 
       `&& user.getHasCreditCard()` `==` `false){`
        `return` `false;`
    `}`
    `//如果申请人现有的信用卡数量大于10,那么不通过`
    `else` `if(user.getCreditCardCount()` `>` `10){`
        `return` `false;`
    `}`
    `return` `true;`
`}`
`

如果用户信息合法性检查通过后,还需要通过如下代码确定用户所办信用卡的额度:

复制代码
//此处为伪代码`

`//根据用户输入信息确定信用卡额度`
`public Integer determineCreditCardLimit(User user){`
    `//如果申请人有房有车,或者月收入在20000以上,那么发放的信用卡额度为15000`
    `if((user.getHouse()` `!=` `null` `&& user.getcar()` `!=` `null)` 
       `|| user.getSalary()` `>` `20000){`
        `return` `15000;`
    `}`
    `//如果申请人没房没车,并且月收入在10000到20000之间,那么发放的信用卡额度为6000`
    `else` `if(user.getHouse()` `==` `null` 
       `&& user.getcar()` `==` `null`
       `&& user.getSalary()` `>` `10000` 
       `&& user.getSalary()` `<` `20000){`
        `return` `6000;`
    `}`
    `//如果申请人没房没车,并且月收入在10000以下,那么发放的信用卡额度为3000`
    `else` `if(user.getHouse()` `==` `null` 
       `&& user.getcar()` `==` `null`
       `&& user.getSalary()` `<` `10000){`
        `return` `3000;`
    `}`
    `//如果申请人有房没车或者没房但有车,并且月收入在10000以下,那么发放的信用卡额度为5000`
    `else` `if((((user.getHouse()` `!=` `null` `&& user.getcar()` `==` `null)` `||` `(user.getHouse()` `==` `null` `&& user.getcar()` `!=` `null))`
       `&& user.getSalary()` `<` `10000){`
        `return` `5000;`
    `}`
    `//如果申请人有房没车或者没房但有车,并且月收入在10000到20000之间,那么发放的信用卡额度为8000`
    `else` `if((((user.getHouse()` `!=` `null` `&& user.getcar()` `==` `null)` `||` `(user.getHouse()` `==` `null` `&& user.getcar()` `!=` `null))`
       `&&` `(user.getSalary()` `>` `10000` `&& user.getSalary()` `<` `20000)){`
        `return` `8000;`
    `}`
`}`

`

上面的申请信用卡业务场景使用规则引擎后效果如下:

系统中引入规则引擎后,业务规则不再以程序代码的形式驻留在系统中,取而代之的是处理规则的规则引擎,业务规则存储在规则库中,完全独立于程序。业务人员可以像管理数据一样对业务规则进行管理,比如查询、添加、更新、统计、提交业务规则等。业务规则被加载到规则引擎中供应用系统调用。

2 使用规则引擎的优势

使用规则引擎的优势如下:

1、业务规则与系统代码分离,实现业务规则的集中管理

2、在不重启服务的情况下可随时对业务规则进行扩展和维护

3、可以动态修改业务规则,从而快速响应需求变更

4、规则引擎是相对独立的,只关心业务规则,使得业务分析人员也可以参与编辑、维护系统的业务规则

5、减少了硬编码业务规则的成本和风险

6、使用规则引擎提供的规则编辑工具,使复杂的业务规则实现变得的简单

3 规则引擎应用场景

对于一些存在比较复杂的业务规则并且业务规则会频繁变动的系统比较适合使用规则引擎,如下:

1、风险控制系统----风险贷款、风险评估

2、反欺诈项目----银行贷款、征信验证

3、决策平台系统----财务计算

4、促销平台系统----满减、打折、加价购

4 Drools介绍

drools是一款由JBoss组织提供的基于Java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件或特定的存储介质中(例如存放在数据库中),使得业务规则的变更不需要修改项目代码、重启服务器就可以在线上环境立即生效。

drools官网地址:Drools - Drools - Business Rules Management System (Java™, Open Source)

drools源码下载地址:GitHub - kiegroup/drools: Mirror of https://github.com/apache/incubator-kie-drools

在项目中使用drools时,即可以单独使用也可以整合spring使用。如果单独使用只需要导入如下maven坐标即可:

复制代码
<dependency>`
    `<groupId>org.drools</groupId>`
    `<artifactId>drools-compiler</artifactId>`
    `<version>7.6.0.Final</version>`
`</dependency>`
`

如果我们使用IDEA开发drools应用,IDEA中已经集成了drools插件。如果使用eclipse开发drools应用还需要单独安装drools插件。

drools规则引擎由以下三部分构成:

1.Working Memory(工作内存)

2.Rule Base(规则库)

3.Inference Engine(推理引擎)

其中Inference Engine(推理引擎)又包括:

  1. Pattern Matcher(匹配器):把事实对象和规则相匹配
  2. Agenda(议程):存放匹配成功将要执行的规则
  1. Execution Engine(执行引擎)

drools API开发步骤如下:

相关推荐
hanbarger12 分钟前
mybatis框架——缓存,分页
java·spring·mybatis
cdut_suye19 分钟前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
苹果醋331 分钟前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
小蜗牛慢慢爬行33 分钟前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
azhou的代码园36 分钟前
基于JAVA+SpringBoot+Vue的制造装备物联及生产管理ERP系统
java·spring boot·制造
wm10431 小时前
java web springboot
java·spring boot·后端
smile-yan1 小时前
Provides transitive vulnerable dependency maven 提示依赖存在漏洞问题的解决方法
java·maven
老马啸西风1 小时前
NLP 中文拼写检测纠正论文-01-介绍了SIGHAN 2015 包括任务描述,数据准备, 绩效指标和评估结果
java
Earnest~1 小时前
Maven极简安装&配置-241223
java·maven
皮蛋很白1 小时前
Maven 环境变量 MAVEN_HOME 和 M2_HOME 区别以及 IDEA 修改 Maven repository 路径全局
java·maven·intellij-idea