Drools workbench kie-server部署和简单使用(全流程)
kie-server workbench 的部署方式有很多,有tomcat(7.1*后停止发布tomcat版本)wildfly 部署 workbench 没什么问题,但是到kie-sever出各种稀奇古怪的毛病,最后使用docker的方式最方便易于使用!
1.docker 安装
首先本地按照docker,windows 需要 企业或专业版本,我用家庭版本,出现了一些安装问题
家庭版又不支持Hyper-V,docker是无法直接安装 解决方式详见下面链接 https://www.jianshu.com/p/1329954aa329 做好前期准备 去 docker官网 下载 建议注册,因为我发现不登录 官方的一些 文档无法查看Docker Desktop安装完之后,右键左面右下角的鲸鱼图标点击setting,然后点击Advance,适当调整以下虚拟机的cpu 内存等参数。
2.workbench 的安装
右键点击左下角windows,选择powershell
拉取镜像到本地:
docker pull jboss/drools-workbench-showcase
官方的操作文档:
https://hub.docker.com/r/jboss/drools-workbench-showcase
执行运行命令:
docker run -p 8080:8080 -p 8001:8001 -d --name drools-workbench jboss/drools-workbench-showcase:latest
然后可以访问workbench
http://localhost:8080/business-central/kie-wb.jsp
workbench相关的账号密码在官方文档有 :
USER PASSWORD ROLE
admin admin admin,analyst,kiemgmt
krisv krisv admin,analyst
john john analyst,Accounting,PM
sales-rep sales-rep analyst,sales
katy katy analyst,HR
jack jack analyst,IT
3.kie-server安装
kie-server 安装也是先拉取镜像
docker pull jboss/kie-server-showcase
然后kie-server启动 和workbench 关联
这里需要注意的是 官方的文档地址:https://hub.docker.com/r/jboss/kie-server-showcase
启动命令 -link 的是 drools-wb:kie-wb
因为之前 -name drools-workbench 所以 我们 -link 应该是 drools-workbench:kie_wb
启动kie-server的命令是:
docker run -p 8180:8080 -d --name kie-server --link drools-workbench:kie_wb jboss/kie-server-showcase:latest
kie-server安装完成
点击 http://localhost:8180/kie-server/services/rest/server/
可以查看kie-sever状态:
4.应用
先在workbench中创建一个project:
项目创建完成后,我们增加两个软件包 分别为 存储实体对象的bean和存储规则的rule。
然后创建数据对象Person在bean目录下 :
创建规则rule_001在rule目录下并且导入之前新建的对象,因为不在一个包下,所以需要手动增加Person对象。
编写完成校验后保存:
设置kie base:
设置如下:
然后保存,build和deploy项目:
查看 kie-server:
进程配置如下:
服务器信息:http://localhost:8180/kie-server/services/rest/server/
容器信息:http://localhost:8180/kie-server/services/rest/server/containers
container-id 和 KSession 在java 代码中都有用
java端编码
pom 引入 (因为我获取的是最新版 目前是 7.31,如果jar 找不到 去中央仓库 下载到本地仓库中)
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> <version>7.31.0.Final</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <version>7.31.0.Final</version> </dependency> <dependency> <groupId>org.kie.server</groupId> <artifactId>kie-server</artifactId> <version>7.31.0.Final</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.22</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency>
在调用 Rest 接口前,需要先在本地定义一套与 WorkBench 中完全一致的数据对象,可以通过拷贝 Workbench 里面生成的源代码来快速实现,远程规则调用实现代码如下:
import com.alibaba.fastjson.JSONObject; import com.idea.demo.bean.Person; 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.util.LinkedList; import java.util.List; /** * @author BothsHand * @date 2020-01-08 */ public class DockerTest { public static final String SERVER_URL = "http://127.0.0.1:8180/kie-server/services/rest/server"; public static final String PASSWORD = "admin"; public static final String USERNAME = "admin"; public static final String KIE_CONTAINER_ID = "demo_1.0.0"; public static void main(String[] args) { // 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); // 规则输入条件 Person person = new Person(); person.setAge(30); person.setSexy("boy"); // 命令定义,包含插入数据,执行规则 KieCommands kieCommands = KieServices.Factory.get().getCommands(); List<Command<?>> commands = new LinkedList<Command<?>>(); commands.add(kieCommands.newInsert(person, "Person")); commands.add(kieCommands.newFireAllRules()); ServiceResponse<ExecutionResults> results = ruleServicesClient.executeCommandsWithResults(KIE_CONTAINER_ID, kieCommands.newBatchExecution(commands,"session1")); // 返回值读取 Person value = (Person) results.getResult().getValue("Person"); System.out.println(JSONObject.toJSON(value).toString()); } }
调用成功返回信息打印:
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接