标签:存储 studio gem 介绍 data- system tps stat XML
规则引擎实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。
规则引擎具体执行可以分为接受数据输入,解释业务规则,根据业务规则做出业务决策几个过程,使用规则引擎可以把复杂、
冗余的业务规则同整个支撑系统分离开,做到架构的可复用移植。
相对于业务系统,规则引擎可以认为是一个独立于业务系统的模块,负责一些规则的计算等。
一般来说,规则引擎主要应用在下面的场景中:
目前的规则引擎系统中,使用较多的开源规则引擎是Drools,另外还有商用的规则管理系统BRMS是ILOG JRules。
Drools是一个基于Java的开源规则引擎,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。
目前版本是5.0.1,Drools从5.0后分为四个模块:
Ilog Jrules是完整的业务规则管理系统(BRMS),它提供了对整个企业业务规则进行建模、编写、测试、部署和维护所必需的所有工具。
Ilog Jrules主要包括以下4个组件:
这两款规则引擎设计和实现都比较复杂,学习成本高,适用于大型应用系统。
Easy Rules是我偶然间看到的一个规则引擎实现,相比Drools等企业级规则引擎,Easy Rules的应用非常简单,学习成本低,容易上手。
下面重点介绍这款轻量级的规则引擎 Easy Rules。
Easy Rules官方主页:http://www.easyrules.org/
Easy Rules提供以下功能:
Easy rules的工程可以从Github下载,构建需要Maven支持。
$ git clone https://github.com/EasyRules/easyrules.git
$ cd easyrules
$ mvn install
Easy Rules打包后是一个单独的jar,使用时需要添加相关文件到工程中,或者添加Maven依赖:
<dependency>
<groupId>org.easyrules</groupId>
<artifactId>easyrules-core</artifactId>
<version>2.4.0</version>
</dependency>
大多数业务规则可以表示为以下定义:
我们可以通过扩展Easy Rules提供的Rule interface来定义规则,或者通过注解,定义自己的规则类。
下面是内置的Rule接口:
package org.easyrules.api;
public interface Rule {
/**
* 这个方法定义了规则执行的条件
* @return true if the rule should be applied, false else
*/
boolean evaluate();
/**
* 这个方法定义了规则执行的具体动作
* @throws Exception if an error occurs
*/
void execute() throws Exception;
//Getters and setters for rule name,
//description and priority omitted.
}
Easy Rules的引擎实例会维护一个不同规则的注册空间,每个Engine可以被视为一个单独的名称空间。
多条规则将会按照他们的自然顺序去执行,也就是默认的优先级。
要创建一个规则引擎和注册规则,可以使用下面的静态方法:
RulesEngineBuilder.aNewEngineBuilder():
RulesEngine rulesEngine = aNewEngineBuilder().build();
rulesEngine.registerRule(myRule);
执行下面的操作启动规则执行:
rulesEngine.fireRules();
下面通过一个简单的Hello World示例来展示Easy Rules的具体应用。
通过注解创建一个具体的规则类:
@Rule(name = "Hello World rule",
description = "Say Hello to duke‘s friends only")
public class HelloWorldRule {
/**
* The user input which represents the data
* that the rule will operate on.
*/
private String input;
@Condition
public boolean checkInput() {
//The rule should be applied only if
//the user‘s response is yes (duke friend)
return input.equalsIgnoreCase("yes");
}
@Action
public void sayHelloToDukeFriend() throws Exception {
//When rule conditions are satisfied,
//prints ‘Hello duke‘s friend!‘ to the console
System.out.println("Hello duke‘s friend!");
}
public void setInput(String input) {
this.input = input;
}
}
接下来创建一个规则引擎的实例,注册并且启动这个规则:
public class Launcher {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Are you a friend of duke?[yes/no]:");
String input = scanner.nextLine();
/**
* Declare the rule
*/
HelloWorldRule helloWorldRule = new HelloWorldRule();
/**
* Set business data to operate on
*/
helloWorldRule.setInput(input.trim());
/**
* Create a rules engine and register the business rule
*/
RulesEngine rulesEngine = aNewRulesEngine().build();
rulesEngine.registerRule(helloWorldRule);
/**
* Fire rules
*/
rulesEngine.fireRules();
}
}
规则启动后会通过一个简单的条件判断(控制台输入),然后执行接下来的动作(输出规则信息)。
除了规则引擎基础的规则执行功能, Easy Rules还支持监听规则执行情况,为规则执行配置调度器,
集成Spring等功能。
标签:存储 studio gem 介绍 data- system tps stat XML
原文地址:http://www.cnblogs.com/binyue/p/6774903.html