Drools规则引擎介绍
Table of Contents
1 规则引擎介绍
1.1 传统业务编程与申明式编程
传统:if/else 声明式:规则1、规则2、规则3
声明式编程,与业务需求分析类似,每个规则代表我们的一个需求。更可读,与需求更接近
1.2 业务规则-面临的问题
- 业务规则、商业逻辑复杂
- 业务规则经常变换
- 24小时不停机,实时修改商业逻辑
1.3 规则引擎解决的问题
- 申明式编程–Rule Engine 允许你说“做什么”,而不是“怎么去做”
- Rule系统能解决非常困难的难题
- 逻辑和数据分离
- 快捷和灵活
- 易于理解
- 可靠的性能:基于RETE算法
- 将需求转化成规则
1.4 什么是规则引擎
- 是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离处理
- 规则引擎的核心就是获取knowledge(知识)
- 应用knowledge到特定的数据上(fact)
- 使用“production rules(产生式规则)”
- IF <conditions> THEN <actions>
- Rule表达逻辑(任何逻辑都可以用这种方式表达)
1.5 什么是规则
- 一个rule有conditions,和actions组成。当所有的conditions匹配,rule可能是“fire”
- Conditions即LHS(left hand side)
- Actions即RHS(right hand side 或 consequence)
- Rule操作应用程序中的数据(fact)
1.6 术语
- Rule engines(比如Drools)使用正向或者反向链(或者混合使用)
- 正向链从事实到结论的推理。rule在LHS conditions匹配的时候执行。Actions可以改变facts,并可能导致新的rule被fire
- 反向链则是指从假设,即要证明的结论,到事实的推理
1.7 推理引擎
- 规则系统的大脑实际上就是一个推理引擎,用于匹配facts和rules
- 推理引擎将事实、数据与产生链规则进行匹配(模式匹配),以推出结论
- 当匹配被找到,rule actions被fire
- Actions
- 经常会改变facts的状态,或者在应用上执行一些“外部”action
1.8 推理例子
- 在“People”的数据集(facts)查找并匹配所有的男性
- Drools:People(sex==“male”)
- SQL:select * from People where sex = ‘male’
1.9 正向链
1.10 何时使用规则引擎
- 当没有更让人满意的“传统”方案
- 当遇到以下问题
- 太复杂
- 没有已知的算法
- 太易变
2 JBoss Drools介绍
2.1 JBoss Drools
- Drools是一个业务逻辑集成平台,基于JAVA和RATE算法的产生式规则引擎实现,是Red Hat旗下的开源产品
- Drools历史
- 2001年,Doorls问世,基于线性蛮力搜索
- 在2.0版本后,又基于Rate算法进行了重写,提高了Drools的性能,规则文件以XML为主
- 在3.0版本,引入了.drl文件格式,它是一种领域特定语言(DSL)专门针对规则编写
- 在5.0版本,引入了Drools Funsion(复杂性处理)/Flow rule等重要功能模块
2.2 Drools组成模块
- 基于网页的规则管理系统(Drools Guvnor(Business Rules manager))
- 规则引擎(Drools Expert(rule engine))
- 流程引擎(jBPM 5(process/workflow))
- 复杂事件处理CEP(Drools Fusion(eventprocessing/temporal reasoning))
- 解决分配和调度类型的问题(OptaPlanner(automated planning))
2.3 Drools5.x特性
- 声明式业务规则
- 避免硬编码业务逻辑到应用中
- Rule可以随时改变而不需要改变java代码和重新编译
- 能解决复杂的问题,易于整合
- Eclipse Rule designer
- Rule创建向导
- 语法编辑器(自动补全、颜色区别)
- 调试:audit log,working memory view,agenda view
- 多种规则格式
- DRL
- DSL
- Decision Tables-电子表格
- XML
2.4 Drools IDE
插件的形式
2.5 DSL编辑器
2.6 业务规则编辑器
3 Drools开发环境搭建与创建样例
— 开发包下载
- 插件下载
- 添加Drools运行环境
- 利用ide向导,创建样例
4 案例解析–Golfing Configuration
- 有4个高尔夫球手从左到右站在一行
- Fred右边的高尔夫球手穿蓝色裤子
- Joe是排在第二个
- Bob穿格子裤子
- Tom没有排在第一和第四位,并且他没有穿橙色的裤子
5 总结
- Rules技术提供了一种新的方式用于创建业务应用系统,通过“声明式”的rule语言写业务逻辑,而不是传统的程序语言
- Rule engine非常适合解决复杂问题,且在没有更好的其他算法的时候
- Rule engine非常适合用来表述业务逻辑
- JBoss Drools的环境搭建
- Drools的实现案例