【Drools规则引擎】基础入门案例五(Kie-Server+WorkBench)
介绍
搭建WorkBench
本文采用Docker部署
docker pull jboss/drools-workbench-showcase
docker run -p 8080:8080 -p 8001:8001 -d --name drools-workbench jboss/drools-workbench-showcase:latest
搭建Kie-Server
docker pull jboss/kie-server-showcase
docker run -p 8180:8080 -d --name kie-server --link drools-workbench:kie_wb jboss/kie-server-showcase:latest
使用WorkBench
访问登入
点击 design 设计
创建项目
填写项目信息
添加包 (后续添加都是 Create New Asset 或者 Add Asset)
添加数据对象
创建属性
创建规则文件并编辑保存
规则文件代码
package cn.flowboot;
import cn.flowboot.entity.Order;
//100元以下,不加分
rule "score_1"
when
$order:Order(amout<100)
then
$order.setScore(0);
System.out.println("触发规则:100元不加分");
end
//100元- 500元加100分
rule "score_2"
when
$order:Order(amout>=100&&amout < 500)
then
$order.setScore(100);
System.out.println("触发规则:100元-500元加100分");
end
//500元- 1000元加500分
rule "score_3"
when
$order:Order(amout>=500&&amout < 1000)
then
$order.setScore(500);
System.out.println("触发规则:500元-1000元加500分");
end
//1000元以上加1000分
rule "score_4"
when
$order:Order(amout>1000)
then
$order.setScore(0);
System.out.println("触发规则:1000元以上加1000分");
end
然后需要设置Kie Base
添加Kie Session
构建和部署
查看 kie-server
配置进程保存
客户端测试
import cn.flowboot.entity.Order;
import com.alibaba.fastjson.JSONObject;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.command.Command;
import org.kie.api.command.KieCommands;
import org.kie.api.runtime.ExecutionResults;
import org.kie.server.api.marshalling.MarshallingFormat;
import org.kie.server.api.model.ServiceResponse;
import org.kie.server.client.KieServicesClient;
import org.kie.server.client.KieServicesConfiguration;
import org.kie.server.client.KieServicesFactory;
import org.kie.server.client.RuleServicesClient;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;
/**
* <h1></h1>
*
* @version 1.0
* @author: Vincent Vic
* @since: 2022/01/09
*/
public class WorkBenchTest {
public static final String SERVER_URL = "http://119.29.196.142:8180/kie-server/services/rest/server";
public static final String PASSWORD = "kieserver1!";
public static final String USERNAME = "kieserver";
public static final String KIE_CONTAINER_ID = "order-relus";
@Test
public void workBenchTest() {
// KisService 配置信息设置
KieServicesConfiguration kieServicesConfiguration =
KieServicesFactory.newRestConfiguration(SERVER_URL, USERNAME, PASSWORD, 10000L);
kieServicesConfiguration.setMarshallingFormat(MarshallingFormat.JSON);
// 创建规则服务客户端
KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(kieServicesConfiguration);
RuleServicesClient ruleServicesClient = kieServicesClient.getServicesClient(RuleServicesClient.class);
// 规则输入条件
Order order = new Order();
order.setAmout(234.1);
// 命令定义,包含插入数据,执行规则
KieCommands kieCommands = KieServices.Factory.get().getCommands();
List<Command<?>> commands = new LinkedList<Command<?>>();
commands.add(kieCommands.newInsert(order, "order"));
commands.add(kieCommands.newFireAllRules());
ServiceResponse<ExecutionResults> results = ruleServicesClient.executeCommandsWithResults(KIE_CONTAINER_ID,
kieCommands.newBatchExecution(commands,"kiesession1"));
// 返回值读取
Order value = (Order) results.getResult().getValue("order");
System.out.println(JSONObject.toJSON(value).toString());
}
}
修改规则,重新构建部署
package cn.flowboot;
import cn.flowboot.entity.Order;
//100元以下,不加分
rule "score_1"
when
$order:Order(amout<300)
then
$order.setScore(0);
System.out.println("触发规则:100元不加分");
end
//100元- 500元加100分
rule "score_2"
when
$order:Order(amout>=300&&amout < 500)
then
$order.setScore(100);
System.out.println("触发规则:100元-500元加100分");
end
//500元- 1000元加500分
rule "score_3"
when
$order:Order(amout>=500&&amout < 1000)
then
$order.setScore(500);
System.out.println("触发规则:500元-1000元加500分");
end
//1000元以上加1000分
rule "score_4"
when
$order:Order(amout>1000)
then
$order.setScore(0);
System.out.println("触发规则:1000元以上加1000分");
end
重新运行,此时规则已经被动态修改