代码拉取完成,页面将自动刷新
Drools是一套规则管理、执行解决方案。
它主要包含几个部分:
比较有趣的是:Drools Workbench 具备Kie Server 注册和发现的功能;Kie Server 自带Container概念。
不知是否可以让你想起 SpringBoot、docker中的相关概念。
本文为入门教程,不做详细介绍,想深入学习,请看官网文档或者视频教程。
规则引擎的目的是为了把多变的繁杂的业务逻辑从代码里抽离出来,所以这里不考虑规则引擎本地调用的方式,直接采用远程调用的方式。
开发模式示意图如下:
这里介绍一种最简单的高可用架构,需要两到三台服务器。
基于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(登录后可自行改密码)。
登录
主界面
编写规则
编译构建
部署规则
<dependency>
<groupId>com.kancy</groupId>
<artifactId>kie-server-client-spring-boot-starter</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
drools.kie:
server:
# 集群节点
nodes: 10.139.60.81:8180,10.139.60.81:8280
# 超时时间
timeout: 5s
# 用户名(已加密)
username: secret(bKAJDsNPMqB3EOJWOE7+8k1nsg6F+tsA0w==)
# 密码(已加密)
password: secret(bKAJDsNPMqB3nQKBB4LDfAA0noADH6FVXIxk)
/**
* <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";
}
}
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规则)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。