本文对常见的规则引擎进行比较分析,为大家提供比较适合的规则引擎。

Ilog JRules 

Ilog JRules是最有名的商用BRMS;

Ilog Jrules是完整的业务规则管理系统(BRMS),它提供了对整个企业业务规则进行建模、编写、测试、部署和维护所必需的所有工具。

Ilog Jrules主要包括以下4个组件:

  • Rule Studio(RS) 面向开发人员使用的开发环境,用于规则的建模和编写
  • Rule Scenario Manager 规则测试工具
  • Rule Team Server(RTS) 基于Web的管理环境,面向业务人员使用,用于规则发布、管理、存储
  • Rule Execution Server(RES) 面向运维人员使用,用于规则执行、监控

Ilog Jrules主页

这两款规则引擎设计和实现都比较复杂,学习成本高,适用于大型应用系统。

ILOG JRules 本身是一个灵活的BRMS(Business Rule Management System),涵盖了业务规则的整个生命周期。ILOG JRules 内的规则引擎是J2EE应用程序,可以部署到任何J2EE项目。另外,ILOG (已被IBM收购)能轻松集成到IDE环境中,可以利用Java控件调用规则引擎。

IRL用When{}Then{}表达 If–Then句式:

 When
{
   ?customer: Customer(totalTime >=1000);
}
Then
{
    execute {?customer.setAmount(getAmount()-20.00);
} 

文档称IRL的语法是Java Syntax-like的,但我怎么也看不出两者是类似的。不过他因为是商业产品,有很强大的编辑器和管理工具,编写规则的速度应该有一定效率。

作为 JRules 的核心组件,规则引擎决定了在规则集的执行过程中,哪些业务规则会被执行,以及以何种顺序执行。理解并合理选择规则引擎的运行模式对于业务规则的正确应用有着重要意义。JRules 规则引擎的三种运行模式:RetePlus、Sequential 和 FastPath。

RetePlus,Rete 是目前主流的规则引擎模式匹配算法,RetePlus 则是 JRules 在 Rete 算法上的扩展和优化,也是 JRules 规则引擎默认的运行模式。

Sequential,顺序运行模式,顾名思义,即规则引擎按顺序执行 rule task 中符合条件的所有规则。

Fastpath 运行模式是增强型的顺序运行模式,和顺序模式类似,Fastpath 也是顺序运行,但是它同时还能和 RetePlus 模式一样在进行模式匹配时检测规则条件的语义关系。

Drools

Drools 是最活跃的开源规则引擎;DROOLS(JBOSS RULES )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。

Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。

Drools规则引擎的基本语法:

package rules

import drools.Product

//当商品类型是DIAMOND时,打折为15%
rule Offer4Diamond
    when
        productObject:Product(type == Product.DIAMOND)
    then
        productObject.setDiscount(15);
    end

//当商品类型是GOLD时,打折为25%
rule Offer4Gold
    when
        productObject: Product(type == Product.GOLD)
    then
        productObject.setDiscount(25);
    end

Jess

Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表;

Jess 是完全由 Java语言编写的规则引擎和脚本环境,由加利福尼亚州利弗莫尔市 Sandia 国家实验室的 Ernest Friedman-Hill编写。使用 Jess,您可以使用声明式规则形式提供的知识来构建具有“推理”能力的 Java 软件。Jess 体积小,重量轻,并且是最快的规则引擎之一。它强大的脚本语言使您可以访问所有 Java API。Jess 包括基于屡获殊荣的 Eclipse 平台的全功能开发环境。

Jess 使用 Rete 算法的增强版本来处理规则。Rete 是解决困难的多对多匹配问题的一种非常有效的机制(例如,参见 “ Rete:用于多模式/多对象模式匹配问题的快速算法”,Charles L. Forgy,人工智能 19(1982) ,17-37。)Jess 有许多独特的功能,包括向后链接和工作记忆查询,当然 Jess 可以直接操作和推理 Java 对象。Jess 还是一个功能强大的 Java 脚本环境,您可以从中创建 Java 对象,调用 Java 方法并实现 Java 接口,而无需编译任何 Java 代码。

Jess可免费用于学术用途,并可被许可用于商业用途。请通过 ip@sandia.gov 与 Sandia 国家实验室联系,获取基于研究的学术许可,或者获取价格和商业许可条款,也可以下载试用版

 jess用  =>  表达 If-Then句式。 这CLIPS是真正的程序员专用语言,而且还若是很专业的程序员才习惯的工具。但这种原本即是用来做专家系统的AI语言,对规则的表达本事也应该是最强的。
下面这段代码,airplane有一个属性–name,有两个子类–喷气式和螺旋桨飞机,其中螺旋桨飞机可以适用任意跑道,而喷气式飞机不能使用Grass跑道。

; Fact templates
    (deftemplate airplane (slot name)) 
    (deftemplate jet extends airplane) 
    (deftemplate prop extends airplane) ;

     Rules 
    (defrule can-use-grass-runway
     (prop (name ?n))
      =>
     (printout t "Aircraft can use grass - " ?n crlf)) 
    
    (defrule can-use-asphalt-runway 
     (airplane (name ?n)) 
     => 
     (printout t "Aircraft can use asphalt - " ?n crlf))

Visual Rules

完全本土化的国内规则引擎,有自主知识产权,全中文操作,比较适合国人习惯,在处理速度、内存占用方面都拥有一定的优势,感觉有些ILOG的翻译版本的意思,算是良心之作了。看看表现形式:

如果

   用户名 = “admin”

那么

   显示 = “你好,” + 用户名

全中文操作界面,看起来比较亲切,规则表现形式也更为简洁。因为收费,所以没有太多资料展示,希望商家能提供基础功能版本供大家免费使用。

Hale-Lee/RuleEngine

Hale-Lee/RuleEngine: 最好使用的规则引擎之一,可以直接使用SQL语句定义规则,简化了编码的负荷,也可以使用XML, drl文件配置规则,还支持drools文件导入。One of the best rule engines, is easy to use SQL statements to define rules, simplify the workload of coding, it also can use XML, DRL file to configure rules, and support import drools file directly.
https://github.com/Hale-Lee/RuleEngine

轻量级规则引擎Easy Rules

Easy Rules官方主页:http://www.easyrules.org/

Easy Rules提供以下功能:

  • 轻量级框架和易于学习的API
  • 基于POJO的开发
  • 通过高效的抽象来定义业务规则并轻松应用它们
  • 支持创建复合规则

Mandarax

Mandarax是一个规则引擎的纯Java实现。基于反向推理(归纳法)。



常用规则引擎比较分析插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2020/12/05/rule-engine-3/