开篇里面介绍了什么是规则,也介绍了几种规则引擎,最终对比,本系列专题就是drools。
规则引擎
- ① 问题引出
规则引擎的问题引出,具体可以解决什么样的问题,说明白。
XX网站注册需要输入相关的用户信息,用户名、密码、验证码、重点看下:手机号和验证码,这2个是检查的时候重点看的两项,因为现在所有互联网用户必须实名认证,手机号码也必须实名,通过手机号的验证码来确定是不是本人。场景:注册后成为会员后,可以进行言论,对于不正确的言论需要找到指定的人,通过手机号的实名信息来获取当前人具体是谁。本身你的言论不正确网站是需要承担风险的,毕竟先说出不正确的言论才导致了后来的追责,所以需要进行一些合法性的检查,判断当前用户是否有自责在这个网站上进行注册。
流程:用户名填写,手机号填写,密码按照要求进行设置,验证码获取,填写正确的验证码,这些都需要用户在后端进行合法性的检查。用户的合法性的检查主要是判断手机号是否已经注册,保证一个用户一个账号,唯一性,判断你正确的方式获取了手机的号的验证码。判断你的手机号是否可能收到正确的验证码。判断验证码不正确,对不起你是无法注册成功的。
合法性规则校验
用户名校验
密码校验
手机号码和验证码校验
- ② 伪代码实现
对于上面的逻辑判断,最先想到的是通过if else的方式进行分支进行判断。
通过上面的伪代码可以看到,业务规则是通过Java代码的方式实现的。这种实现方式存在如下问题:
- 硬编码实现业务规则难以维护
- 硬编码实现业务规则难以应对变化
- 业务规则发生变化需要修改代码,重启服务后才能生效
最好的实现方式:规则引擎。主要是让老铁体会到规则引擎在有很多业务规则发挥的作用,虽然上面这个是通过的规则,但是如果针对业务来讲,业务规则是经常变化的,变化频率越高,使用规则引擎的优势就越明显。
- ③ 什么是规则引擎
规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。【刚上面的场景里面要注册用户对吧?申请用户的时候根据2条判断用户名,2条判断密码,3条判断验证 码和手机号,这些都通过了才可以申请用户。 类似这些规则可以通过业务抉择分离出来交给业务规则引擎来进行处理。使用规则引擎提供的语义模块来编写规则,用户进行配置进行管理。在规则引擎里面有个规则库,可以想象成一个数据库,一条一条业务规则就相当于数据库里面的一个一个数据,既然是数据了就可以对数据进行管理,使用这种方式的好处, 如果这多条规则不试用了,可能需要更新数据,更新这些规则,扩展第五个第六个规则, 对规则进行增删该查的操作,这就是使用规则的思想。 】
需要注意的是规则引擎并不是一个具体的技术框架,而是指的一类系统,即业务规则管理系统。
规则引擎实现了将业务决策从应用程序代码中分离出来,接收数据输入,解释业务规则,并根据业务规则做出业务决策。规则引擎其实就是-个输入输出平台。【类似一个大脑,原始的数据输入进去,内部反馈后给出要的结果进行输出】
使用规则引擎后的效果是
分离业务中的if else的代码。完全交给规则引擎内部来进行判断处理。系统中引入规则引擎后,业务规则不再以程序代码的形式驻留在系统中,取而代之的是处理规则的规则引擎,业务规则存储在规则库中,完全独立于程序。业务人员可以像管理数据一样对业务规则进行管理, 比如查询、添加、更新、统计、提交业务规则等。业务规则被加载到规则引擎中供应用系统调用。
- ④ 使用规则引擎的好处
下面的优势归根到底,就是业务规则的代码分离出来了,只有分离出来了,才会有下面的好处。
- 业务规则与系统代码分离,业务代码的分离,实现业务规则的集中管理,在规则引擎中集中管理规则。
- 在不重启服务的情况下可随时对业务规则进行扩展和维护,动态的维护。后面的专题可以看到,这个效果。
- 可以动态修改业务规则,从而快速响应需求变更,如果不使用就要用java代码的方式,一旦业务规则发生变化,就需要修改代码,重启服务后就才可以实现,类似动态修改数据库里面的数据。
- 规则引擎是相对独立的,只关心业务规则,使得业务分析人员也可以参与编辑、维护系统的业务规则,本质上跟技术无关,纯业务的,业务规则的指定编辑等等。
- 减少了硬编码业务规则的成本和风险,if else属于硬编码,成本和风险都比较高。
- 使用规则引擎提供的规则编辑工具,使复杂的业务规则实现变得的简单【有工具就方便了】。
- ⑤ 规则引擎应用场景
对于一些存在比较复杂的业务规则并且业务规则会频繁变动的系统比较适合使用规则引擎,如下:
- 风险控制系统:风险贷款、风险评估【规则多,经常变动】
- 反欺诈项目:银行贷款、征信验证【买房获取征信,个人信用如何,对于信用不好的,可能就不贷款,如何判断能否贷款,就指定了很多的规则】
- 决策平台系统:财务计算
- 促销平台系统–满减、打折、加价购【这些跟生活比较密切,双11,双12,618,平台搞些活动就有对应的促销活动和规则】
- 运营商:套餐升档【你目前是18的你可以升那些套餐,加宽带的适合你,加流量地适合你,这些也有规则指定】
- ⑤ drools 介绍
所说的规则引擎并不是具体的规则框架,而是一类系统,业务规则管理系统,而drools属于业务规则这块具体的一款产品。技术框架。
drools是一款由JBoss组织提供的基于Java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件或特定的存储介质中(例如存放在数据库中,脚本文件,excel表格),使得业务规则的变更不需要修改项目代码【业务规则单独抽离了】、重启服务器就可以在线上环境立即生效。
官网:drools.org源码:github.com/kiegroup/drools
在项目中使用drools时,即可以单独使用也可以整合spring使用。如果单独使用只需要导入如下maven坐标即可:
最新的版本7.52.0.Final
<!-- https://mvnrepository.com/artifact/org.drools/drools-compiler --> <dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <version>7.52.0.Final</version> </dependency>
实际使用没必要用最新的直接用晚点版本就可以了,因为这样的版本更加稳定,也方便找对应的资料。
idea 开发 drools应用,一定要安装drools的插件。
- ⑥ idea 安装drools插件的步骤
- ⑦ drools API 开发步骤
大概有个印象,一会入门案例都会使用到。
- 获取KieServices,提供一个类名
- 有了Service,获取KieContainer容器,容器的对象。
- 有了容器来获取Kiesession,session就是会话,学的很多技术都有会话的概念。
- Insert fact 字面翻译就是事实对象,现在可以理解为普通的javabean,使用session来操作这个对象。
- 规则引擎触发规则,规则触发后产生一些结果,这些都是在规则引擎内部执行的,6.最后把KieSession关闭掉。
使用drools来操作规则引擎规则是固定话的,有点想JDBC操作数据库,获取驱动,编写连接,传递参数,解析结果。关闭链接。使用drools的也基本是这样一个过程。
PS:下次通过一个场景,用drools代码的方式来实现规则的判断。
,