规则引擎是一种嵌套在应用程序中的组件,实现将业务规则从应用程序代码中分离出来。规则引擎使用特定的语法编写业务规则。
引入规则引擎后端带来的好处:
(1)实现业务逻辑与业务规则的分离,实现业务规则的集中管理。
(2)可以动态修改业务规则,从而快速响应需求变更。
(3)使业务分析人员可以参与编辑、维护系统的业务规则。
(4)使用规则引擎提供的规则编辑工具,使复杂的业务规则实现变得简单。
目前的规则引擎系统中,使用较多的开源规则引擎是Drools,另外还有商用的规则管理系统BRMS是ILOG JRules。这两款规则引擎设计和实现都比较复杂,学习成本高,适用于大型应用系统。当然还有还有付费版的URule这样优秀的规则引擎。
Drools 是用 Java 语言编写的开放源码规则引擎,基于Apache协议,基于RETE算法,于2005年被JBoss收购。Drools就是为了解决业务代码和业务规则分离的引擎。Drools 规则是在 Java 应用程序上运行的,其要执行的步骤顺序由代码确定,为了实现这一点,Drools 规则引擎将业务规则转换成执行树。drools优点:
1、简化系统架构,优化应用。
2、提高系统的可维护性和维护成本。
3、方便系统的整合。
4、减少编写“硬代码”业务规则的成本和风险。
drools官网:https://www.drools.org/
droolsgithub:https://github.com/kiegroup/drools
Drools是一个业务逻辑集成平台(BLip)。它是用Java编写。它是由JBoss和红帽公司扩展支持,并实现Rete模式匹配算法的一个开源项目。
通俗地说,Drools是一种工具,使我们能够分离内部业务流程,找到逻辑和数据的集合。我们需要注意的两个重要关键词是逻辑和数据。Drools的被分成两个主要部分:编写和运行系统。
制作: 制作过程涉及创建规则文件(.DRL文件)。
运行时: 它涉及到创建工作存储器和处理活化。
优点:1.策略规则和执行逻辑解耦方便维护。
缺点:
1.规则规模变大以后也会变得不好维护,相对硬编码的优势便不复存在。
2.规则的语法仅适合扁平的规则,对于嵌套条件语义(then里嵌套when…then子句)的规则只能将条件进行笛卡尔积组合以后进行配置,不利于维护。
由于Drools本身不提供可视化界面,所以需要集成到项目后需要再次开发动态配置页面及其功能,drools规则是文本的,可以先读取再加载执行,比如存储到数据库,每次加载规则都是从数据库中读取。而规则则可以通过其他方式写入数据库。
由于Drools本身不提供可视化界面,所以调用方式可以分为以下两种:
创建好服务后提供api直接调用
二次开发。与前端配合(通过蚂蚁G6组件实现规则编辑,传递json格式的drl脚本),后端解析json并集成quartz或akka任务调度,使用spring kafka组件接收来自集群的数据流。
IBM WebSphere ILOG JRules 是目前业界领先的业务规则管理平台。与传统的由 IT 人员用硬代码来维护规则的做法不同,ILOG JRules 让业务用户能够在不依赖或者有限依赖于 IT 人员的情况下,快速创建、修改、测试和部署业务规则,以满足经常变化的业务需求。ILOG JRules 提供了一整套的工具,帮助开发人员和业务人员进行规则的全生命周期管理。
主要组件:
1、Rule Studio(RS) 面向开发人员使用的开发环境,用于规则的建模和编写。
2、Rule Scenario Manager 规则测试工具。
3、Rule Team Server(RTS) 基于Web的管理环境,面向业务人员使用,用于规则发布、管理、存储。
4、Rule Execution Server(RES) 面向运维人员使用,用于规则执行、监控。
JRules 规则引擎提供了 RetePlus、Sequential 和 FastPath 三种运行模式,以适应不同的应用需求,获得最优性能。在基于业务规则引擎的应用中,需要根据不同应用的特点,合理地组织和编排业务规则,选择合适的运行模式,有助于更好的发挥规则引擎的效能,但同时复杂度较高。
Easy Rules 是一款 Java 规则引擎,它的诞生启发自有Martin Fowler 一篇名为 “Should I use a Rules Engine?” 文章。Easy Rules 提供了规则抽象来创建带有条件和操作的规则,以及运行一组规则来评估条件和执行操作的RulesEngine API。
特性:
1、轻量级框架和易于学习的API。
2、基于POJO的开发。
3、通过高效的抽象来定义业务规则并轻松应用它们。
4、支持创建复合规则。
5、使用表达式语言定义规则的能力。
官方wiki文档https://github.com/j-easy/easy-rules/wiki
旗正VisualRules是由国家科技部和财政部的创新基金支持,专门针对国内规则引擎市场空白的情况,结合国内项目的特点而开发的一款业务规则管理系统(BRMS)产品。
Visual Rules是在规则引擎基础上发展出来的一款产品,其秉承了规则引擎可以使业务逻辑的变化可以独立于程序之外的特点,同时结合国内软件项目的特点,为数据库层和界面层也提供了独立于程序之外配置的特点,因此本产品不光是一个业务规则管理系统,还是一个基于规则引擎的web快速开发平台。
特点就不赘述了,不是开源的。
官方地址:http://www.bstek.com/products/urule
git地址:https://github.com/youseries/urule.git
URule是一款纯Java规则引擎,它以RETE算法为基础,提供了向导式规则集、脚本式规则集、决策表、交叉决策表(PRO版提供)、决策树、评分卡及决策流共六种类型的规则定义方式,配合基于WEB的设计器,可快速实现规则的定义、维护与发布。
URule提供了两个版本:一个是基于Apache-2.0协议开源免费版本,URule开源版本第一款基于Apache-2.0协议开源的中式规则引擎;另一个是商用PRO版本
URULE PRO版与开源版主要功能比较 | ||
---|---|---|
特性 | URULE PRO版 | URULE开源版 |
向导式决策集 | 有 | 有 |
脚本式决策集 | 有 | 有 |
决策树 | 有 | 有 |
决策流 | 有 | 有 |
决策表 | 有 | 有 |
交叉决策表 | 有 | 无 |
复杂评分卡 | 有 | 无 |
文件名、项目名重构 | 有 | 无 |
参数名、变量常量名重构 | 有 | 无 |
Excel决策表导入 | 有 | 无 |
规则集模版保存与加载 | 有 | 无 |
中文项目名和文件名支持 | 有 | 无 |
服务器推送知识包到客户端功能的支持 | 有 | 无 |
知识包优化与压缩的支持 | 有 | 无 |
客户端服务器模式下大知识包的推拉支持 | 有 | 无 |
规则集中执行组的支持 | 有 | 无 |
规则流中所有节点向导式条件与动作配置的支持 | 有 | 无 |
循环规则多循环单元支持 | 有 | 无 |
循环规则中无条件执行的支持 | 有 | 无 |
导入项目自动重命名功能 | 有 | 无 |
规则树构建优化 | 有 | 无 |
对象查找索引支持 | 有 | 无 |
规则树中短路计算的支持 | 有 | 无 |
规则条件冗余计算缓存支持 | 有 | 无 |
基于方案的批量场景测试功能 | 有 | 无 |
知识包调用监控 | 有 | 无 |
更为完善的文件读写权限控制 | 有 | 无 |
知识包版本控制 | 有 | 无 |
SpringBean及Java类的热部署 | 有 | 无 |
技术支持 | 有 | 无 |
urule开发指南http://www.bstek.com/resources/doc/