最近研究了一下规则引擎drools。

这篇博客带你搭建并运行一个可在线编辑,在线打包,远程执行的规则引擎(drools)

本篇博客同时参考https://blog.csdn.net/chinrui/article/details/79018351 博客内容

1、搭建Workbench (首先保证主机联网,有docker环境)

  docker run -p 8080:8080 -p 8001:8001 -d --name drools-wb jboss/drools-workbench-showcase:latest

  容器启动完之后就可以访问如下链接(可能docker镜像下载有点慢。可以切换阿里云镜像仓库)

  http://IP:8080/business-central/kie-wb.jsp?locale=zh_CN

界面如下:

  用户名:admin  密码:admin

  登录进去之后

  点击创建工程

  点击创建Add Asset

  创建完对象点击保存

  保存之后回到工程界面

  继续创建rule,向导性规则

  1. package com.myspace.mytest1;
  2.  
  3. rule "myrule1"
  4. dialect "java"
  5. when
  6. $info : mytestmodel1( sex == )
  7. then
  8. $info.setName( "李雷" );
  9. end

创建测试场景

编辑如下测试规则

然后返回点击build

然后点击

2、创建 kie-server

  docker run -p 8180:8080 -d --name kie-server --link drools-wb:kie_wb jboss/kie-server-showcase:latest

  运行如上docker容器

  

  容器运行起来之后

  访问如下链接http://IP:8180/kie-server/services/rest/server/

  

  在访问链接 http://IP:8180/kie-server/services/rest/server/containers

  这里发现已经有了我们刚才创建的kie-server服务列表,这是我们需要创建一个运行容器,返回我们的mytest1rule

  发布成功之后

  然后在访问链接http://IP:8180/kie-server/services/rest/server/containers

接下来上代码开发我们的测试程序

maven项目引用依赖

  1. <properties>
  2. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3. <maven.compiler.source>1.8</maven.compiler.source>
  4. <maven.compiler.target>1.8</maven.compiler.target>
  5. <drools.version>7.18.0.Final</drools.version>
  6. </properties>
  7.  
  8. <dependencies>
  9. <dependency>
  10. <groupId>org.drools</groupId>
  11. <artifactId>drools-core</artifactId>
  12. <version>${drools.version}</version>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.drools</groupId>
  16. <artifactId>drools-compiler</artifactId>
  17. <version>${drools.version}</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.drools</groupId>
  21. <artifactId>drools-decisiontables</artifactId>
  22. <version>${drools.version}</version>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.drools</groupId>
  26. <artifactId>drools-templates</artifactId>
  27. <version>${drools.version}</version>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.kie</groupId>
  31. <artifactId>kie-api</artifactId>
  32. <version>${drools.version}</version>
  33. </dependency>
  34.  
  35. <dependency>
  36. <groupId>org.kie.server</groupId>
  37. <artifactId>kie-server-client</artifactId>
  38. <version>${drools.version}</version>
  39. </dependency>
  40.  
  41. </dependencies>

实体类

  1. package com.myspace.mytest1;
  2.  
  3. /**
  4. * This class was automatically generated by the data modeler tool.
  5. */
  6.  
  7. public class mytestmodel1 implements java.io.Serializable {
  8.  
  9. static final long serialVersionUID = 1L;
  10.  
  11. private java.lang.Integer id;
  12. private java.lang.String name;
  13. private java.lang.Integer sex;
  14.  
  15. public mytestmodel1() {
  16. }
  17.  
  18. public java.lang.Integer getId() {
  19. return this.id;
  20. }
  21.  
  22. public void setId(java.lang.Integer id) {
  23. this.id = id;
  24. }
  25.  
  26. public java.lang.String getName() {
  27. return this.name;
  28. }
  29.  
  30. public void setName(java.lang.String name) {
  31. this.name = name;
  32. }
  33.  
  34. public java.lang.Integer getSex() {
  35. return this.sex;
  36. }
  37.  
  38. public void setSex(java.lang.Integer sex) {
  39. this.sex = sex;
  40. }
  41.  
  42. public mytestmodel1(java.lang.Integer id, java.lang.String name,
  43. java.lang.Integer sex) {
  44. this.id = id;
  45. this.name = name;
  46. this.sex = sex;
  47. }
  48.  
  49. @Override
  50. public String toString() {
  51. return "mytestmodel1 [id=" + id + ", name=" + name + ", sex=" + sex + "]";
  52. }
  53.  
  54. }

控制台执行代码

  1. package com.myspace.mytest1;
  2.  
  3. import java.io.IOException;
  4. import java.util.LinkedList;
  5. import java.util.List;
  6.  
  7. import org.kie.api.KieServices;
  8. import org.kie.api.command.Command;
  9. import org.kie.api.command.KieCommands;
  10. import org.kie.api.runtime.ExecutionResults;
  11. import org.kie.server.api.marshalling.MarshallingFormat;
  12. import org.kie.server.api.model.ServiceResponse;
  13. import org.kie.server.client.KieServicesClient;
  14. import org.kie.server.client.KieServicesConfiguration;
  15. import org.kie.server.client.KieServicesFactory;
  16. import org.kie.server.client.RuleServicesClient;
  17.  
  18. public class droolstest {
  19.  
  20. public static final String SERVER_URL = "http://ip:8180/kie-server/services/rest/server";
  21. public static final String PASSWORD = "kieserver1!";
  22. public static final String USERNAME = "kieserver";
  23. public static final String KIE_CONTAINER_ID = "mytest1_1.0.0-SNAPSHOT";
  24. public static final String KIE_SESSION_ID = "mytest1";
  25.  
  26. public static void main(String[] args) throws IOException {
  27.  
  28. // KisService 配置信息设置
  29. KieServicesConfiguration kieServicesConfiguration =
  30. KieServicesFactory.newRestConfiguration(SERVER_URL, USERNAME, PASSWORD, 10000L);
  31. kieServicesConfiguration.setMarshallingFormat(MarshallingFormat.JSON);
  32.  
  33. // 创建规则服务客户端
  34. KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(kieServicesConfiguration);
  35. RuleServicesClient ruleServicesClient = kieServicesClient.getServicesClient(RuleServicesClient.class);
  36.  
  37. // 规则输入条件
  38. mytestmodel1 mytest = new mytestmodel1();
  39. mytest.setSex(1);
  40.  
  41. // 命令定义,包含插入数据,执行规则
  42. KieCommands kieCommands = KieServices.Factory.get().getCommands();
  43. List<Command<?>> commands = new LinkedList<>();
  44. commands.add(kieCommands.newInsert(mytest, "mytestmodel1"));
  45. commands.add(kieCommands.newFireAllRules());
  46. ServiceResponse<ExecutionResults> results = ruleServicesClient.executeCommandsWithResults(KIE_CONTAINER_ID,
  47. kieCommands.newBatchExecution(commands, KIE_SESSION_ID));
  48.  
  49. // 返回值读取
  50. mytestmodel1 value = (mytestmodel1) results.getResult().getValue("mytestmodel1");
  51. System.out.println(value.toString());
  52. }
  53.  
  54. }

执行结果

当sex为0时有如下输出

当sex等于1的时候

这里就完成了整个流程的跑通

其中注意链接的 KIE_CONTAINER_ID和KIE_SESSION_ID的对应关系

drools规则引擎与kie-wb和kie-server远程执行规则(7.18.0.Final)的更多相关文章

  1. 规则引擎以及blaze 规则库的集成初探之三——Blaze规则引擎和SRL

    原文地址:http://jefferson.iteye.com/blog/68604 在上面介绍利用JSR94的api使用的章节中,我们使用的具体引擎的实现是一个商业产品,如果想了解Drools的使用 ...

  2. [Drools]JAVA规则引擎 -- Drools 2

    上一篇文章 http://blog.csdn.net/quzishen/archive/2011/01/25/6163012.aspx 描述了一些常用的drools的语法标签和一个模拟实例即发送积分的 ...

  3. 小明历险记:规则引擎drools教程一

    小明是一家互联网公司的软件工程师,他们公司为了吸引新用户经常会搞活动,小明常常为了做活动加班加点很烦躁,这不今天呀又来了一个活动需求,我们大家一起帮他看看. 小明的烦恼 活动规则是根据用户购买订单的金 ...

  4. Drools等规则引擎技术对比分析

    项目中需要设计开发一个规则引擎服务,于是调研了业界常用的规则引擎. 常见的规则引擎如下: Ilog JRules 是最有名的商用BRMS: Drools 是最活跃的开源规则引擎: Jess 是Clip ...

  5. Drools规则引擎-如果判断某个对象中的集合是否包含指定的值

    规则引擎集合相关处理 在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值.而Drools规则引擎也提供了多种处理方式,比如通过from.c ...

  6. Drools规则引擎-如果Fact对象参数为null如何处理

    问题场景 在技术交流群(QQ:715840230)中有同学提出这样的问题: 往kiesession里面传入fact,如果不做输入检查fact里面有些字段可能是null值.但是如果在外面做输入检查,规则 ...

  7. 规则引擎深度对比,LiteFlow vs Drools!

    前言 Drools是一款老牌的java规则引擎框架,早在十几年前,我刚工作的时候,曾在一家第三方支付企业工作.在核心的支付路由层面我记得就是用Drools来做的. 难能可贵的是,Drools这个项目在 ...

  8. 【java规则引擎】之Drools引擎中模拟ReteooStatefulSession内部设计结构

    该片文章只是抽取drools中java代码实现的一些代码结构,帮助我们理解drools是如何实现rete算法的. 该部分只是抽取ReteooStatefulSession工作过程中的代码架构 利用了多 ...

  9. .Net Core 环境下构建强大且易用的规则引擎

    本文源码: https://github.com/jonechenug/ZHS.Nrules.Sample 1. 引言 1.1 为什么需要规则引擎 在业务的早期时代,也许使用硬编码或者逻辑判断就可以满 ...

随机推荐

  1. gitbook 入门教程之使用 gitbook-editor 编辑器开发电子书

    亲测,目前已不再支持旧版 gitbook-editor 编辑器,而官网也没有相应的新版编辑器,如果哪位找到了新版编辑器,还望告知! 现在注册 gitbook 账号会默认重定向到 新版官网,而 旧版官网 ...

  2. 4. [mmc subsystem] mmc core(第四章)——host模块说明

    零.说明 对应代码drivers/mmc/core/host.c,drivers/mmc/core/host.h. 为底层host controller driver实现mmc host的申请以及注册 ...

  3. Storm入门(九)Storm常见模式之流聚合

    流聚合(stream join)是指将具有共同元组(tuple)字段的数据流(两个或者多个)聚合形成一个新的数据流的过程. 从定义上看,流聚合和SQL中表的聚合(table join)很像,但是二者有 ...

  4. Dapeng框架-开源高性能分布式微服务框架

    我们公司性质是新零售,公司也有专门的框架组.这群大牛自己开发了一整套分布式微服务框架.我们也在使用这套框架,有很多心得体会. 该框架既Dapeng也!开源github地址:https://github ...

  5. Java面试题:Java中怎么样实现多线程

    方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可. 下面是一个例子: public class MyThrea ...

  6. Entity Framework Core 2.1,添加种子数据

    EFCore 2.1出来有一段时间了,里面的新功能还没怎么用,今天研究下如何使用EF Core 2.1添加种子数据. 这部分的官方文档地址是:https://docs.microsoft.com/en ...

  7. 【TensorFlow篇】--反向传播

    一.前述 反向自动求导是 TensorFlow 实现的方案,首先,它执行图的前向阶段,从输入到输出,去计算节点值,然后是反向阶段,从输出到输入去计算所有的偏导. 二.具体 1.举例 图是第二个阶段,在 ...

  8. 找不到servlet对应的class

    javax.servlet.ServletException: Wrapper cannot find servlet class com.suntomor.lewan.pay.NotifyRecei ...

  9. (转)学习MySQL优化原理,这一篇就够了!

    原文:https://mp.weixin.qq.com/s__biz=MzI4NTA1MDEwNg==&mid=2650763421&idx=1&sn=2515421f09c1 ...

  10. mongodb Enable Auth

    启动mongodb没有使用通道控制 mongod --port 27017 --dbpath /data/db1 连接mongo mongo --port 27017 创建用户 use admin d ...