常见的 JAVA 四大开源规则引擎简介
1.Drools
Drools是用Java语言编写的开源规则引擎,其使用 ReteOO 算法执行规则,兼容 JSR 94,支持使用自然语言表达业务逻辑,也可以使用 Java/Groovy/Python + XML 语法编写规则。Drools 规则引擎基于以下抽象组件实现:规则(Rules)、事实(Facts)、生产内存、工作内存、议程(Agenda)。
当用户或系统在 Drools 中添加或更新规则相关的信息时,该信息会以一个或多个事实的形式插入Drools规则引擎的工作内存中。Drools 规则引擎匹配事实和存储在生产内存中规则,筛选符合执行条件的规则,规则引擎会在议程中激活和注册对应的规则,在议程中 Drools 会进行优先级的排序和冲突的解决,准备规则的执行。
2.URule
URule号称是第一款基于 Apache-2.0 协议开源的中式规则引擎,基于 RETE 算法实现,主要侧重点在于规则设计器和规则仓库的结合。使用者通过 web 浏览器来定义业务规则,完成后的业务规则文件会被存储在规则存储仓库中。规则文件调用时引擎会从规则存储仓库里把指定的规则文件取出,再通过规则构建引擎对规则进行解析、编译,最后由规则执行引擎执行并返回结果。
3.脚本引擎-Groovy
Groovy 是一种基于 Java 虚拟机并运行于 JVM 的动态开发语言,其通过借鉴一些脚本语言的思想实现了许多强大的特性,其主要的特点包括:
1.支持 DSL 和其它简洁的语法,让代码变得易于阅读和维护,使学习成本变得很低;
2.支持单元测试和模拟(对象),可以简化测试;
3.可无缝集成所有已经存在的 Java 对象和类库;
4.直接编译成 Java 字节码,这样可以在任何使用 Java 的地方使用 Groovy。
基于以上特性,我们通过在已有的 Java 应用程序中嵌入groovy的加载器,就可以实现脚本代码的热加载,不用重新启动就可改变代码的执行逻辑。例如可以将脚本片段用前端组件进行组合,后台拼装为执行片段或 Groovy 类存储到数据库以及缓存中,执行时实时查询出来进行加载和实例化并执行。
在实现了以上功能后,再自行实现规则的组合和决策流的编排等功能,即可形成一个决策引擎核心。这样做的优点是整个决策引擎核心是自行实现,可扩展和灵活性比较强,不过缺点也比较明显,就是前后端基础的开发工作量非常大。
4.表达式引擎-Aviator
以上两种规则引擎是重量级的框架,适用于复杂的决策业务,而对于一般的业务规则,如果没有太多的逻辑层次,是可以通过表达式引擎来间接实现规则引擎,目前较新的开源框架国内的有Aviator。其主要有以下几个特性:
1.高性能:Aviator 的基本执行过程是将表达式直接翻译成对应的 java 字节码执行,整个过程最多扫两趟,这样就保证了它的性能超越绝大部分解释性的表达式引擎。
2.轻量级:Aviator 除了依赖 commons-beanutils 这个库之外不依赖任何第三方库,因此,整体非常轻量级,整个 jar 包大小哪怕发展到 5.0 这个大版本,也才 430K。
3.开放能力强:Aviator 内置的函数库非常“节制”,除了必须的字符串处理、数学函数和集合处理之外,类似文件 IO、网络等等你都是没法使用的,这样便能有效保证 Aviator 运行期的安全。如果你需要更多的高阶能力,是可以通过开放的自定义函数来接入以及各种定制选项。
4.开发量少:Aviator 与脚本语言类似,使用表达式引擎也需要自行实现规则的组合和决策流的编排等功能,不过由于表达式的运行比较易于控制,所以 Aviator 减少了不少的基础开发工作。
以上便是常见的 JAVA 四大开源规则引擎的简单介绍,更多了解与使用请看Drools、URule、Groovy、Aviator。
评论