1 Star 2 Fork 0

kancy / drools-quick-start

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Drools

一、简介

Drools是一套规则管理、执行解决方案。

它主要包含几个部分:

  • 一个业务规则引擎(Drools Core)
  • 一个规则管理网站(Drools Workbench)
  • 一个执行服务器(Kie Server)。

比较有趣的是:Drools Workbench 具备Kie Server 注册和发现的功能;Kie Server 自带Container概念。

不知是否可以让你想起 SpringBoot、docker中的相关概念。

本文为入门教程,不做详细介绍,想深入学习,请看官网文档或者视频教程

二、开发模式

规则引擎的目的是为了把多变的繁杂的业务逻辑从代码里抽离出来,所以这里不考虑规则引擎本地调用的方式,直接采用远程调用的方式。

开发模式示意图如下:

开发模式

三、服务架构

这里介绍一种最简单的高可用架构,需要两到三台服务器。

  • kie server 需要分配2GM+内存
  • kie wb 需要分配4GM+内存
  • 负载均衡器可以由调用端实现

最简部署方式

kie-wb 和 kie-server交互原理

交互原理

内置maven

四、环境安装

基于Dockers快速安装,官方镜像(版本:7.34.0.Final)我已经上传到阿里云,加快镜像拉取速度。

#!/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. 编译构建 编译构建

  2. 部署规则 部署规则

四、调用规则

1.引入maven依赖

<dependency>
    <groupId>com.kancy</groupId>
    <artifactId>kie-server-client-spring-boot-starter</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

2.加入kie-server配置

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.调用规则


/**
 * <p>
 * TestController
 * <p>
 *
 * @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


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: 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规则)

五、参考资料

空文件

简介

drools-quick-start 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/kancy666/drools-quick-start.git
git@gitee.com:kancy666/drools-quick-start.git
kancy666
drools-quick-start
drools-quick-start
master

搜索帮助