初识规则引擎

一、什么是规则引擎

规则引擎是一种嵌入应用中的组件,通过将业务流程与业务规则分离开来实现商业灵活性,也就是降低了各个模块的耦合度,这样无需太多的复杂性就能处理业务逻辑的调整和更改。(说简单点就是if-then语句)

二、什么情况下需要规则引擎

a.业务逻辑代码中包含了很多if-else语句
b.代码变化会导致大量财政损失

三、规则引擎的结构

  • 规则引擎是用于外部程序来调用规则包的一批Java类库,将规则引擎嵌入到应用程序中就和添加Java类一样。通过RuleEngine类调用规则包来传递需要处理的业务数据。规则包配置完成后会生成一个集成Rulecontext的类,并且将这个类自动编译发布到java的class path中。外部程序通过RuleEngine接口,根据需要调用规则包,加载对应的RuleContext类。
  • Web方式调用规则包原理:在规则配置器中添加一个web方式调用规则包的测试页面,这个页面采用jsp程序,根据规则包的接口数据结构自动生成文本输入框。同时根据数据结构的类型自动生成解析request中提交的数据,并且传递到规则引擎中,并且执行对应的规则包,最后取出返回结果显示在页面当中。
    这里写图片描述

四、规则引擎的工作流程

1.将事件加入到工作内存中
2.将工作内存中的时间和规则库中的规则进行匹配
3.将发生冲突的规则放入冲突集合中
4.按照冲突消解策略,把需要执行的规则按照顺序放入议程
5.执行规则设定的动作
6.重复第2到第5步,直到所有规则都被匹配执行

五、开源drools

1.什么是drools

Drools是一个开源的基于java的规则引擎, 也叫JBoss Rules

2.drools组成模块

Drools Guvnor 基于网页的规则管理系统
Drools Expert 规则引擎
JBPM 流程引擎
Drools Fusion 复杂事件处理

3.Drools属性

Salience:指定规则执行的优先级,数字越大,优先级越高。
Dialect:指定使用语言,java或者mvel(mvel是基于就java的表达式语言,支持属性和方法直接访问),默认为java。
Activation-group:将规则进行分组,同组中只要有一个规则执行了,其他规则都不再执行。
Agenda-group:设置了该属性后,只有手动激活才能执行该规则,按照优先级执行。
Lock-on-active:只能与-group一起使用,可以避免执行过的规则再次被执行。
Auto-focus:设置为true时可以自动获取焦点,默认值为false。
Date-effective:当系统时间大于等于date-effective设置的时间时规则才会触发执行。

4.drools7 API

(Drools7和Drools5使用的是两套完全不同的API)
- Kieservices:Kieservices就是一个中心,通过它来获取各种对象来完成规则构建、管理、执行等操作。
- Kiecontainer:Kiecontainer是一个KieBase的容器,提供了获取KieBase的方法和创建KieSession的方法。(获取KieSession的方法通过KieBase来创建KieSession)
- KieBase:KieBase是一个知识仓库,包含了很多规则、流程、方法等。如果需要执行规则KieBase中的规则,就需要根据KieBase创建KieSession。
- KieSession:KieSession是应用程序和规则引擎进行交互的会话通道,不会建立缓存。
- KieRepository:用于存放KieModule仓库。
- KieProject:初始化KieContainer,构造KieModule并将其存放在KieRepository中,KieContainer可以通过KieProject来查找KieModule定义的信息来构造KieBase和KieSession。
- ClasspathKieproject:实现KieProject接口。

六、规则文件的结构

rule “name”
atrributes
when
LHS
then
RHS
end

七、Rete算法

保存以往匹配过程中产生的所有信息,只将新增加的事实与规则进行匹配,牺牲存储空间来换取时间效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章