一、Drools规则引擎概述

一、什么是规则

我们的日常生活是由规则驱动的,比如开车遇到红灯就停下来,是因为我们遵循一条红灯停的规则。我们可以用更加简单的结构来表示日常生活中的规则:当XXX的时候,做XXX的事情。

在软件应用系统中也是这样的,几乎所有复杂的业务场景都是由大量的简单规则组成的,而业务规则往往是不断变化的,如果使用常规代码则会产生大量的维护工作和版本优化。

二、什么是规则引擎

规则引擎是由推理引擎发展而来的,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中剥离出来,并使用预定义的语义模块来编写业务决策。

规则引擎的主要功能就是接收数据的输入,解析业务规则并根据业务规则做出业务决策。

规则引擎的核心就是获取知识(Knowledge),并将Knowledge应用到特定数据上(Fact),它主要是使用产生式规则(Production Rules) IF "conditions" THEN "actions"来表达逻辑。

 

使用规则引擎的好处:

1、实现业务逻辑和业务规则的分离,实现业务规则的集中管理

2、可以动态修改业务规则,从而快速响应需求变更

3、使业务分析人员也可以参与编辑、维护系统的业务规则

三、什么是Drools

Drools(Jboss Rules)是Java语言编写的开源规则引擎,使用Rete算法对所编写的规则求值,实现了将复杂多变的业务决策从应用程序中分离出来,以规则脚本的形式存放在文件中,使得规则的变更不再需要修改代码、重启机器就可以在线上环境立即生效。

 

Drools主要分为两部分:规则的编写和规则的解释执行。规则的编译与运行要通过Drools提供的API来实现,而这些API总体上又可以分为:规则编译、规则收集和规则执行。

 

使用Drools的优点:

1、简化系统架构,优化应用

2、提高系统的可维护性,降低维护成本

3、方便系统整合

4、减少编写“硬代码”业务规则的成本和风险

四、Drools基本概念

1、Working Memory

2、Fact

Fact对象是指在Drools规则应用中,将一个普通JavaBean对象插入到规则引擎的Working Memory当中后的对象。规则可以对Fact对象进行任意读写操作,Fact对象不是对原来JavaBean对象进行克隆,而是原来JavaBean对象的引用。

Fact对象通常是一个具有getter和setter方法的POJO对象,通过getter和setter方法可以很方便的对Fact对象进行读写操作,可以简单的将Fact对象理解为规则引擎与应用系统进行数据交互的桥梁。

3、Rule

一个规则Rule是由Conditions和Actions组成的,当所有的Conditions都匹配成功后,会执行Actions。Rule操作应用程序数据Fact来完成模式匹配过程。

一个Rule中的Conditions称之为LHS(Left Hand Side),Actions称之为RHS(Right Hand Side)。

4、KIE

KIE(Knowledge is everything)是Jboss里面一些项目的统称,比如我们比较熟悉的Drools和jBPM,这些项目之前有一定的关联关系,并且存在一些通用的API,比如涉及到构建(Build)、部署(Deploy)、加载(Load)等方面的,这些API都会以KIE为前缀来表示这些事通用API。后面会介绍到的KieServices、KieContainer、KieSession类都是KIE的公共API。

五、Drools应用场景

Drools规则引擎功能非常强大,但并不是所有场景都适用。一般来说,规则引擎适用项目都具有以下特征:

1、存在一个非常复杂的场景,即使商业专家也难以完全定义

2、没有已知或定义明确的算法解决方案

3、需求不稳定,经常变更

4、需要基础部分数据量快速做出决策

你可能感兴趣的:(一、Drools规则引擎概述)