# drools-quick-start **Repository Path**: kancy666/drools-quick-start ## Basic Information - **Project Name**: drools-quick-start - **Description**: drools-quick-start - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2020-03-14 - **Last Updated**: 2025-08-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Drools ## 一、简介 [Drools](https://www.drools.org/)是一套规则管理、执行解决方案。 它主要包含几个部分: - 一个业务规则引擎(Drools Core) - 一个规则管理网站(Drools Workbench) - 一个执行服务器(Kie Server)。 比较有趣的是:Drools Workbench 具备Kie Server 注册和发现的功能;Kie Server 自带Container概念。 不知是否可以让你想起 SpringBoot、docker中的相关概念。 本文为入门教程,不做详细介绍,想深入学习,请看[官网](https://docs.jboss.org/drools/release/7.34.0.Final/drools-docs/html_single/index.html)文档或者[视频教程](https://ke.qq.com/course/398835)。 ## 二、开发模式 规则引擎的目的是为了把多变的繁杂的业务逻辑从代码里抽离出来,所以这里不考虑规则引擎本地调用的方式,直接采用远程调用的方式。 开发模式示意图如下: ![开发模式](./doc/开发模式.png) ## 三、服务架构 这里介绍一种最简单的高可用架构,需要两到三台服务器。 - kie server 需要分配2GM+内存 - kie wb 需要分配4GM+内存 - 负载均衡器可以由调用端实现 ![最简部署方式](./doc/最简部署方式.png) ### kie-wb 和 kie-server交互原理 ![交互原理](./doc/交互原理.png) ![内置maven](./doc/内置maven.png) ## 四、环境安装 基于Dockers快速安装,官方镜像(版本:7.34.0.Final)我已经上传到阿里云,加快镜像拉取速度。 ```bash #!/bin/sh # 启动drools_wb docker run -p 8080:8080 -p 8001:8001 -d --name drools_wb \ -v /data/docker_file/drools_wb/maven_respository:/opt/jboss/wildfly/bin/repositories/kie/global \ -v /data/docker_file/drools_wb/git_respository:/opt/jboss/wildfly/bin/.niogit:Z \ registry.cn-hangzhou.aliyuncs.com/devops-t/business-central-workbench-showcase:7.34.0.Final # 这里启动两个 kie-server # KIE_SERVER_ID kie-server (相当于微服务里面的serviceName) # KIE_SERVER_CONTROLLER http://localhost:8080/business-central/rest/controller (相当于微服务里面的注册中心地址) docker run -p 8180:8080 -d -e KIE_SERVER_ID=kie-server1 --name kie-server1 --link drools_wb:kie_wb \ registry.cn-hangzhou.aliyuncs.com/devops-t/kie-server-showcase:7.34.0.Final docker run -p 8280:8080 -d -e KIE_SERVER_ID=kie-server2 --name kie-server2 --link drools_wb:kie_wb \ registry.cn-hangzhou.aliyuncs.com/devops-t/kie-server-showcase:7.34.0.Final ``` 安装完成后,浏览器输入:`http://localhost:8080/business-central/kie-wb.jsp`。 默认用户:admin/admin(登录后可自行改密码)。 ### 管理平台简单介绍 1. 登录 ![登录](./doc/image/登录.png) 2. 主界面 ![主界面](./doc/image/主界面.png) 3. 编写规则 ![编写规则](./doc/image/编写规则.png) - 克隆项目到本地开发: 1. git clone -b master http://localhost:8080/business-central/git/{spaceName}/{projectName} 2. git clone -b master ssh://{username}@localhost:8001/{spaceName}/{projectName} 4. 编译构建 ![编译构建](./doc/image/编译构建.png) 5. 部署规则 ![部署规则](./doc/image/部署规则.png) ## 四、调用规则 ### 1.引入maven依赖 ```xml com.kancy kie-server-client-spring-boot-starter 1.0.0-SNAPSHOT ``` ### 2.加入kie-server配置 ```yaml drools.kie: server: # 集群节点 nodes: 10.139.60.81:8180,10.139.60.81:8280 # 超时时间 timeout: 5s # 用户名(已加密) username: secret(bKAJDsNPMqB3EOJWOE7+8k1nsg6F+tsA0w==) # 密码(已加密) password: secret(bKAJDsNPMqB3nQKBB4LDfAA0noADH6FVXIxk) ``` ### 3.调用规则 ```java /** *

* TestController *

* * @author: kancy * @date: 2020/3/14 16:13 **/ @Slf4j @RequiredArgsConstructor @RestController public class TestController { private static String CONTAINER_ID = demo2; private static String SESSION_NAME = "hello"; private final DroolsRuleEngine droolsRuleEngine; @GetMapping("/test") public String test(){ // 定义规则执行入参 RuleParams ruleParam = RuleParamsBuilder.create(CONTAINER_ID,SESSION_NAME) // 插入一个对象到工作内存 .insert("user", new User()) .build(); // 调用规则引擎,并且得到执行结果 RuleResults ruleResult = droolsRuleEngine.call(ruleParam); log.info("ruleResult : {}", ruleResult); if (ruleResult.isSuccess()){ // 调用成功时,获取内存中的对象 User user = ruleResult.getValue("user"); log.info("user : {}", user); } return "ok"; } } ``` ### 4.测试 `curl http://localhost:8080/test` ```text . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.10.RELEASE) 2020-03-15 00:01:23.837 INFO 10216 --- [ main] DemoKieServerClientSpringBootApplication : Starting DemoKieServerClientSpringBootApplication on SH-ZT-HUANGCK with PID 10216 (D:\development\idea\workspace\drools-quick-start\demo\demo-kie-server-client-spring-boot-starter\target\classes started by huangchengkang in D:\development\idea\workspace\drools-quick-start) 2020-03-15 00:01:23.840 DEBUG 10216 --- [ main] DemoKieServerClientSpringBootApplication : Running with Spring Boot v2.1.10.RELEASE, Spring v5.1.11.RELEASE 2020-03-15 00:01:23.841 INFO 10216 --- [ main] DemoKieServerClientSpringBootApplication : No active profile set, falling back to default profiles: default 2020-03-15 00:01:24.776 INFO 10216 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2020-03-15 00:01:24.800 INFO 10216 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2020-03-15 00:01:24.800 INFO 10216 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.27] 2020-03-15 00:01:24.939 INFO 10216 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2020-03-15 00:01:24.939 INFO 10216 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1055 ms 2020-03-15 00:01:25.008 INFO 10216 --- [ main] o.k.s.api.marshalling.MarshallerFactory : Marshaller extensions init 2020-03-15 00:01:25.309 INFO 10216 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2020-03-15 00:01:25.448 INFO 10216 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2020-03-15 00:01:25.452 INFO 10216 --- [ main] DemoKieServerClientSpringBootApplication : Started DemoKieServerClientSpringBootApplication in 2.147 seconds (JVM running for 3.169) 2020-03-15 00:01:28.782 INFO 10216 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2020-03-15 00:01:28.782 INFO 10216 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2020-03-15 00:01:28.788 INFO 10216 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 5 ms 2020-03-15 00:01:28.989 INFO 10216 --- [nio-8080-exec-2] c.k.d.k.s.c.controller.TestController : ruleResult : RuleResult{success=true, code='SUCCESS', msg=Container com.kancy:demo:1.0.0-SNAPSHOT successfully called.} 2020-03-15 00:01:28.990 INFO 10216 --- [nio-8080-exec-2] c.k.d.k.s.c.controller.TestController : user : User(name=kacny, age=26, description=触发hello规则) ``` ## 五、参考资料 - [官方文档](https://docs.jboss.org/drools/release/7.34.0.Final/drools-docs/html_single/index.html) - [Drools Docker 安装](https://github.com/jboss-dockerfiles/business-central) - [Kieserver 详解](https://blog.csdn.net/qq_15022971/article/details/101770038) - [Drools Kie 架构简析](https://www.jianshu.com/p/786f272d3db2) - [Drools 规则引擎语法](https://www.jianshu.com/p/6ca9dd36f7aa)