1、创建kmodule.xml文件
在src\main\resources目录下新建名为META-INF的文件夹,在文件夹内新建名为kmodule.xml的文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule"> <!-- packages值要与src\main\resources目录下rules文件夹名一致 --> <kbase name="rules" packages="rules"> <ksession name="demo-ksession-rules" /> </kbase> </kmodule>
2、创建drl规则文件
在src\main\resources目录下新建名为rules的文件夹,名称必须要与src\main\resources\kmodule.xml文件中的packages属性值一致。在文件夹内新建名为demo_rules.drl的规则文件,文件内容如下:
package com.seasy.drools.test
//包名可以随意指定
//导入规则文件需要使用到的外部类或类的静态方法
import com.seasy.repeater.vo.HeaderVo;
//不循环执行规则
no-loop true
rule "responseHeader"
//优先级,数值越大越先执行
salience 100
when
vo : HeaderVo(msgId!="")
then
System.out.println("message id is: " + vo.getMsgId());
System.out.println("message type is: " + vo.getMsgType());
double tmp = 5000 / 4.5;
System.out.println("tmp = " + tmp);
if("1001".equals(vo.getMsgType())) {
vo.setResultCode("0000");
vo.setResultCodeMsg("success");
} else {
vo.setResultCode("0001");
vo.setResultCodeMsg("error");
}
System.out.println("result code: " + vo.getResultCode());
end
3、pom.xml文件依赖包
<dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> <version>6.3.0.Final</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <version>6.3.0.Final</version> </dependency> <dependency> <groupId>org.kie</groupId> <artifactId>kie-internal</artifactId> <version>6.3.0.Final</version> </dependency> <dependency> <groupId>org.kie</groupId> <artifactId>kie-api</artifactId> <version>6.3.0.Final</version> </dependency>
4、编写java代码
//通过KieServices来获取各种对象来完成规则构建、管理和执行等操作
KieServices kieService = KieServices.Factory.get();
//KieContainer是KieBase的容器,KieBase是一个知识仓库,包含规则、方法等
KieContainer kieContainer = kieService.getKieClasspathContainer();
//KIE默认读取src/main/resources/META-INF/kmodule.xml文件,并生成KieSession
KieSession kieSession = kieContainer.newKieSession("demo-ksession-rules");
HeaderVo vo = new HeaderVo();
vo.setMsgId(StringUtil.getUUID());
//vo.setMsgType("1001");
//将事实(Fact)插入到引擎
kieSession.insert(vo);
//通知规则引擎执行规则
kieSession.fireAllRules();
System.out.println("result code: " + vo.getResultCode());
System.out.println("result code message: " + vo.getResultCodeMsg());
5、输出结果
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
message id is: 82175a5d41f643aeb453b13e32fd1f58
message type is: null
tmp = 1111.111111111111
result code: 0001
result code: 0001
result code message: error