规则引擎简介
规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。在Java中,大多数流行的规则引擎都实现JSR94
将规则引擎想象成一个以数据和规则作为输入的系统。它将这些规则应用于数据,并根据规则定义为我们提供输出。让我们以一个在线购物为例,我们希望为客户提供某些促销或折扣。
- 如果购物车总额超过$ 400,可为客户提供20%的折扣。
- 第一次下单给10%。
上面将购物车和客户定义为满足规则集中定义的条件的规则将在其中执行的数据。
规则引擎的优点
- 简化系统架构,优化应用
- 提高系统的可维护性
- 减少编写“硬代码”业务规则的成本和风险
- 应付特殊状况,即客户一开始没有提到要将业务逻辑考虑在内
- 过将规则引擎分开,它提供了更大的可重用性。
规则引擎场景
- 流程分支非常复杂,规则变量庞大
- 有不确定性的需求,变更频率较高
- 需要快速做出响应和决策
- 规则变更期望脱离于开发人员,脱离coding
Java 中常用的开源规则引擎有哪些呢?
Drools
Drools是业务规则管理系统(BRMS)解决方案。它提供了核心业务规则引擎(BRE),Web UI和规则管理应用程序(Drools Workbench),对符合性级别3的决策模型和注释(DMN)模型的完整运行时支持,以及用于核心开发的Eclipse IDE插件及Idea插件。
Drools 是一个基于Charles Forgy’s的RETE算法的,易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。 业务分析师人员或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。
Drools是开源软件,根据Apache Software License发布。它用100%纯Java?编写,可以在任何JVM上运行,并且在Maven Central存储库中也可用。
Drools 是业务逻辑集成平台,被分为5个项目:
- Drools Workbench (web UI )
- Drools Expert (business rules engine)
- Drools Fusion (complex event processing features)
- jBPM (process/workflow integration for rule orchestration/flow)
- OptaPlanner (automated planning)
Drools相关概念:
事实(Fact):对象之间及对象属性之间的关系
规则(rule):是由条件和结论构成的推理语句,一般表示为if…Then。一个规则的if部分称为LHS,then部分称为RHS。
模式(module):就是指IF语句的条件。这里IF条件可能是有几个更小的条件组成的大条件。模式就是指的不能在继续分割下去的最小的原子条件。
EasyRule
EasyRule是轻量级的规则引擎API。它提供Rule抽象来创建带有条件和动作的规则,以及RulesEngine通过一组规则运行以测试条件和执行动作的API。
以下是EasyRule的一些核心特点:
- 轻量级规则引擎API。
- 基于注释和POJO。
- 支持复合规则构造。
- 支持表达语言(如MVEL和SpEL)来定义规则。
简单了解下easyRule
核心概念
Rule : 包含规则执行的条件与动作,描述,优先级别。属于最基本配置。
Facts:输入对象。
RulesEngine:规则引擎执行核心。
简单了解下使用例子
添加Maven 依赖
简易规则提供以下创建规则的选项
- 以声明方式使用注释。
- 务实地使用流利的API。
- 使用表达语言
- 使用规则描述符。
让我们看几个例子:
声明式注解
或者使用函数方式
表达式方式
文件描述
执行规则
RuleBook
RuleBook提供了灵活的简单直观的DSL。如果您有更多规则集,我们可以将其构建为带注释的POJO,并且RuleBook可以将整个包立即转换为RuleBook。它提供了一个易于使用的启用Lambda的领域特定语言或使用POJO,让我们使用RuleBook来查看一个简单的规则定义:
Maven依赖
要将RuleBook添加到项目中,请在pom.xml文件中添加以下依赖项:
让我们看一个例子:
Hello World
使用Facts
执行规则
OpenL Tablets
OpenL Tablets业务规则引擎(BRE)和业务规则管理系统(BRMS)。它包含以下主要组件:
- Business Rules Engines(业务规则引擎)
- WebStudio
- Web services(web服务)
- Rule repository(基于JCR的实现的规则库)
核心概念
Rules:规则是由条件,操作和返回值组成的逻辑语句
Tables: 列出了OpenL Tablets处理的基本信息,例如规则和数据
Projects: 是处理规则相关信息所需的所有资源的容器。通常,一个简单的项目仅包含带有规则的Excel文件。
maven依赖
使用
总结
在本文中,我们讨论了Java中流行的规则引擎。这些规则引擎为业务逻辑抽象提供了灵活性。在所有这些规则引擎中,Drools是最先进,最活跃的规则引擎,也正因如此,环境也是相对复杂。
EasyRule更加简洁,我们现在就是使用的这个解决方案。
根据自身的业务需要,选择更加符合的业务引擎方案。