【Drools规则引擎】基础入门案例五(Kie-Server+WorkBench)

  • 介绍
  • 搭建WorkBench
  • 搭建Kie-Server
  • 使用WorkBench
    • 访问登入
  • 客户端测试

介绍

java语言开发的开源业务规则引擎
DROOLS(JBOSS RULES )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。

搭建WorkBench

本文采用Docker部署

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

搭建Kie-Server

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

使用WorkBench

访问登入

浏览器访问:http://ip:port/business-central
输入账号 admin 密码 admin 登入


点击 design 设计

创建项目

填写项目信息

添加包 (后续添加都是 Create New Asset 或者 Add Asset)

添加数据对象

创建属性

创建规则文件并编辑保存

规则文件代码

package cn.flowboot;import cn.flowboot.entity.Order;//100元以下,不加分
rule "score_1"
when$order:Order(amout<100)
then$order.setScore(0);System.out.println("触发规则:100元不加分");
end//100元- 500元加100分
rule "score_2"
when$order:Order(amout>=100&&amout < 500)
then$order.setScore(100);System.out.println("触发规则:100元-500元加100分");
end//500元- 1000元加500分
rule "score_3"
when$order:Order(amout>=500&&amout < 1000)
then$order.setScore(500);System.out.println("触发规则:500元-1000元加500分");
end//1000元以上加1000分
rule "score_4"
when$order:Order(amout>1000)
then$order.setScore(0);System.out.println("触发规则:1000元以上加1000分");
end

然后需要设置Kie Base

添加Kie Session

构建和部署

查看 kie-server

配置进程保存

客户端测试

import cn.flowboot.entity.Order;
import com.alibaba.fastjson.JSONObject;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.command.Command;
import org.kie.api.command.KieCommands;
import org.kie.api.runtime.ExecutionResults;
import org.kie.server.api.marshalling.MarshallingFormat;
import org.kie.server.api.model.ServiceResponse;
import org.kie.server.client.KieServicesClient;
import org.kie.server.client.KieServicesConfiguration;
import org.kie.server.client.KieServicesFactory;
import org.kie.server.client.RuleServicesClient;import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;/*** <h1></h1>** @version 1.0* @author: Vincent Vic* @since: 2022/01/09*/
public class WorkBenchTest {public static final String SERVER_URL = "http://119.29.196.142:8180/kie-server/services/rest/server";public static final String PASSWORD = "kieserver1!";public static final String USERNAME = "kieserver";public static final String KIE_CONTAINER_ID = "order-relus";@Testpublic void workBenchTest() {// KisService 配置信息设置KieServicesConfiguration kieServicesConfiguration =KieServicesFactory.newRestConfiguration(SERVER_URL, USERNAME, PASSWORD, 10000L);kieServicesConfiguration.setMarshallingFormat(MarshallingFormat.JSON);// 创建规则服务客户端KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(kieServicesConfiguration);RuleServicesClient ruleServicesClient = kieServicesClient.getServicesClient(RuleServicesClient.class);// 规则输入条件Order order = new Order();order.setAmout(234.1);// 命令定义,包含插入数据,执行规则KieCommands kieCommands = KieServices.Factory.get().getCommands();List<Command<?>> commands = new LinkedList<Command<?>>();commands.add(kieCommands.newInsert(order, "order"));commands.add(kieCommands.newFireAllRules());ServiceResponse<ExecutionResults> results = ruleServicesClient.executeCommandsWithResults(KIE_CONTAINER_ID,kieCommands.newBatchExecution(commands,"kiesession1"));// 返回值读取Order value = (Order) results.getResult().getValue("order");System.out.println(JSONObject.toJSON(value).toString());}}

输出 {“score”:100,“amout”:234.1}

修改规则,重新构建部署

package cn.flowboot;import cn.flowboot.entity.Order;//100元以下,不加分
rule "score_1"
when$order:Order(amout<300)
then$order.setScore(0);System.out.println("触发规则:100元不加分");
end//100元- 500元加100分
rule "score_2"
when$order:Order(amout>=300&&amout < 500)
then$order.setScore(100);System.out.println("触发规则:100元-500元加100分");
end//500元- 1000元加500分
rule "score_3"
when$order:Order(amout>=500&&amout < 1000)
then$order.setScore(500);System.out.println("触发规则:500元-1000元加500分");
end//1000元以上加1000分
rule "score_4"
when$order:Order(amout>1000)
then$order.setScore(0);System.out.println("触发规则:1000元以上加1000分");
end

重新运行,此时规则已经被动态修改

输出 :{“score”:0,“amout”:234.1}

【Drools规则引擎】基础入门案例五(Kie-Server+WorkBench)相关推荐

  1. Drools规则引擎之入门案例(一)

    1.问题引出 一个在线申请信用卡的业务场景,用户需要录入个人信息,通过上图可以看到,用户录入的个人信息包括姓名.性别.年龄.学历.电话.所在公司.职位.月收入.是否有房.是否有车.是否有信用卡等.录入 ...

  2. Drools规则引擎基础教程

    前言 曾经接触过一个电信移动通讯项目,每个案件大量的业务逻辑变更,但其实里面的业务改动,其实就是一些业务逻辑变动. 而程序员编写的代码也没有任何技术含量,跟着式样书逐字逐句的翻译就行.大量的if/el ...

  3. drools规则引擎的基本使用和原理介绍

    理论基石 借用:<drools规则引擎技术指南>来说, drools是: 开源项目,规则引擎技术,规则语法形成的规则文件,可以存在数据库等,通过drools包提供的接口,调用生成对应的结果 ...

  4. 黑马Drools学习笔记(一)——Drools规则引擎示例概述以及SpringBoot整合示例

    文章目录 1. 问题引出 2. 规则引擎概述 2.1 什么是规则引擎 2.2 使用规则引擎的优势 2.3 规则引擎应用场景 2.4 Drools介绍 3. Drools入门案例 3.1 业务场景说明 ...

  5. 详解:Drools规则引擎探究

    引入 ▐ 问题引入 天猫奢品业务方为了吸引更多的新客,和提高会员的活跃度,做了一期活动,通过购买天猫奢品频道内的任意商品就赠送特殊积分,积分可以直接兑换限量的奢品商品.假如业务方给的规则如下: 主刃同 ...

  6. SpringBoot2 整合 Drools规则引擎,实现高效的业务规则

    本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的 ...

  7. 大数据风控项目实战 Drools规则引擎

    可以借鉴的干货 1,统一存储服务,包含:多种存储库连接封装和服务封装 在统一存储服务 2.获取配置的环境 类:EnvVariable 一.风控项目介绍 对一个复杂支付系统提供统一.全面.高效的风险控制 ...

  8. Drools规则引擎之常用语法

    一.基础api 在 Drools 当中,规则的编译与运行要通过Drools 提供的各种API 来实现,这些API 总体来讲可以分为三类:规则编译.规则收集和规则的执行.完成这些工作的API 主要有Kn ...

  9. drools规则引擎可视化_一文看懂开源工作流引擎 Flowable「转」

    原文链接:[https://xie.infoq.cn/article/ece75889c715e0bc87a73e44c]. 一.工作流引擎使用场景 工作流在企业管理系统中是高频使用的功能,一个最常见 ...

最新文章

  1. CSS之常用选择器(元素、id、类、通配选择器)
  2. vue $emit、$on、$refs简介
  3. Linux系统中重启tomcat的一般步骤
  4. mysql 分表全局id_MySQL分庫分表環境下全局ID生成方案
  5. 做一名真正的软件工程师
  6. python转换函数使用_Python Socket模块中的IP转换函数
  7. jQuery事件对象event的属性和方法
  8. 指定复制的数据库或者表
  9. hann function
  10. 自动登录Windows系统
  11. bigdecimal 保留两位小数_五年级数学知识点总结-02小数的除法
  12. 分布式日志收集系统实践(视频教程)
  13. 左耳朵耗子:云原生时代的开发者应具备这5大能力
  14. 百度站点Logo权限获取与使用说明
  15. Vscode文件夹和代码各种颜色(详细汇总)
  16. 微信小程序实战十三:狗狗小程序云搭建
  17. html简单的折叠菜单
  18. uniapp实现退款理由的界面
  19. Python和线性代数平衡化学等式
  20. CAS票据之ST与TGT过期策略详细说明

热门文章

  1. Linux中ps -ef 命令详解
  2. go语言学习第八天==》mysql数据库增删改查、用go语言 客户端(client)发起htttp get请求,post请求,postForm请求,Head请求,Do请求
  3. 标学历年真题2016年版 真考题库3 字处理
  4. SharedPreference与文件存储
  5. moviepy音视频剪辑:与time时间线相关的变换函数freeze_region、make_loopable、speedx、time_mirror、time_symmetrize介绍
  6. RGB图像灰度直方图的绘制
  7. mysql百万级数据查询优化实践-从开始到开除
  8. mysql 两条sql合并_两条查询SQL的语句的数据合并到一起
  9. 分布式ID生成算法——leaf算法
  10. CentOS 安装卸载rpm软件