# 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)。
## 二、开发模式
规则引擎的目的是为了把多变的繁杂的业务逻辑从代码里抽离出来,所以这里不考虑规则引擎本地调用的方式,直接采用远程调用的方式。
开发模式示意图如下:

## 三、服务架构
这里介绍一种最简单的高可用架构,需要两到三台服务器。
- kie server 需要分配2GM+内存
- kie wb 需要分配4GM+内存
- 负载均衡器可以由调用端实现

### kie-wb 和 kie-server交互原理


## 四、环境安装
基于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. 登录

2. 主界面

3. 编写规则

- 克隆项目到本地开发:
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. 编译构建

5. 部署规则

## 四、调用规则
### 1.引入maven依赖
```xml
* 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)