Drools

news2024/11/15 7:14:11

Drools基本了解

谈谈对业务规则管理系统的了解 举例说明

规则引擎系统是一个规则管理系统,接受数据输入、解释业务规则、根据业务规则做出业务决策的一个系统,其适用场景有贷款风险评估、积分优惠系统、保险理赔系统。规则是由“条件+动作”组成,对应代码中的when-then。

  • 例如在贷款风险评估系统,系统后台中业务人员通过图形化界面预设好客户信用评级良好且无历史违约记录则允许申请贷款(这是一个规则),之后根据其收入情况设置其有能力偿还的最高限额(这又是一个规则)。其中信用评级良好、无历史违约记录、收入情况都是条件,允许申请贷款、贷款最高限额是在满足条件的情况下执行的动作。用户在申请贷款时,输入其个人情况(在规则引擎系统中称为条件)与规则库中的条件做匹配,匹配后产生相应的动作判定,用户就能知道自己能否申请贷款和贷款最高限额。
  • 例如在积分优惠系统中,业务人员在系统后台中设置当积分达到800分后(条件)购买的商品打九折(动作),当积分达到1000分后(条件)购买的商品打八折(动作)。以上是场景中的两条规则,积分达到800分、达到1000分两个条件对应的动作分别是打九折打八折。用户在付款时,其积分情况(条件)会被输入到规则管理系统中,与规则库中的规则进行匹配,如果某条规则所有的条件都得到满足,那么相应的动作就会执行,用户界面会有相应的打折判定返回。
  • 例如在保险理赔系统中,业务人员在后台预设了伤病情况、历史住院行为、年龄、报销比例等条件 确定理赔金额(动作),业务人员添加条件并设置对应的动作,形成了一条保险理赔规则。用户在使用APP进行理赔申请时,输入的条件与规则引擎系统中规则进行匹配,当某条规则的所有条件都得到满足,那么规则的动作就会被执行,用户就能看到相应的理赔额度。

Drools相比于if-else编写的程序有哪些优点

高效:

  1. 优先级顺序的树形(网络)结构:Drools的规则机制是有优先级的树形结构(通过Rete网络高效地匹配和触发规则,这个网络是一个有向无环图),这里的优先级是指将条件出现频次高距离近的条件排在前面,出现频次高的首先被执行。
  2. 缓存机制:当条件触发了动作后,该动作会被缓存起来,当有相同的条件再次执行时,直接从缓存机制中找到要触发的动作,而不用去内存中查找。
  3. 多线程 :Drools支持多线程环境,可以并行处理多个规则互相不影响,加快了规则的处理速度。

易维护:Drools通过drl文件来定义业务规则,这些规则与应用程序的代码分离,当业务逻辑变更时不需要修改应用程序代码,只调整drl文件;而普通的if-else逻辑结构是写在java文件,按类和对象高内聚模块化管理代码,散落在多个文件中,当业务调整后需要调整代码时,要在多个文件中修改,所以drools更易于维护。

Drools的格式

package:位于文件的顶部,唯一标识文件的名称空间;

import:导入需要使用的类的包或类;

function:函数定义;Query:根据规则名称查找符合条件的结果对象;Declare:声明一个类

global:定义全局变量;

rule:定义此规则的唯一标识,when、then、end出现在其范围内

when:条件判定

then:满足条件时触发的动作,包括增删改

end:规则执行结束标识符

一个规则的大致机构如下:

no-loop: no-loop为true防止死循环,当规则被再次激活时,从而导致死循环。

agenda-group:对规则分组,这些组在议程中独立存在,只有当对应的组被赋予焦点(Focus)时,该组中的规则才有可能被执行。

lock-on-active:lock-on-active为true时控制当前的规则只会被执行一次。

Drools的执行流程(原理)

文件一经启动加载为规则树,存入到内存中,规则树与事实相匹配,继而执行相应的动作

1.创建规则文件.drl,定义规则的名称、属性、条件和动作;

2.创建知识库KieBase,加载规则文件.drl并编译为字节码;

3.创建会话KieSession,从知识库KieBase中获取会话对象

4.插入事实,将业务数据插入到工作内存Working Memory中

5.执行规则,在.drl文件中触发推理机制根据事实和规则进行匹配和执行

6.处理结果,获取规则执行的结果并进行相应的处理

项目

项目提出的背景(Drools存在的问题)

业务与技术耦合:项目的目标用户是上层系统的业务人员,业务逻辑的变更时需要修改配置文件,但是业务人员不懂代码(如应该在哪个文件的什么地方修改代码,代码中的rule when then又是什么意思),就需要懂代码的技术人员来修改配置文件。对于业务人员难以独立完成规则文件的配置实现数据处理,需要技术人员介入。

维护性差:业务与技术耦合让不同专业的人员来操作,维护操作也需要技术人员参与。

难使用,出错率高:业务人员无法独立使用产品;类比java文件是按类、对象存储的,一个规则完整逻辑形式和语法配置写在一个drl文件,可读性差,代码分层可视化阅读程度不高;并且规则文件没有语法检查机制,规则配置极易出错。

无法热部署、实时性差:规则文件内置在系统中,需要提前配置好,系统系统的时候会加载该规则文件,但是一旦规则文件更改就需要重新启动服务,新配置的内容才能生效,无法更改完就能生效。

没有规则提示:复杂规则引擎系统有非常多的规则配置,规则的条件满足后会触发相应的动作,然而规则配置多,业务人员极有可能不知道是什么原因触发了动作,难以对规则进行分析与统计。

解决耦合性与难使用的问题?

提供可视化页面给业务人员,提供规则库、决策集、决策表、决策树、评分卡、决策流编辑页面,业务人员根据文字提示录入规则条件和动作,不用考虑业务逻辑内部实现原理。

业务人员输入的中文内容如何映射到drl文件?

技术人员添加变量库,在变量库中实现中文字段与drl文件中变量映射,变量库会加载到业务人员编辑规则的页面,业务人员就能看到中文的字段,但实际传给服务端的是被映射后的名称(购买数量映射为purchaseNum)。

业务员在图形化界面添加规则条件经历哪些过程关联到代码中

先由技术人员在变量库中完成规则字段的映射,并在drl文件中按照业务逻辑编写规则;接着业务员在图形化界面用技术人员映射好的属性名称添加条件,管理规则,添加好的规则会在数据库中形成一个个表;项目启动后动态拼接从数据库中获得这些规则,并根据事实来评估规则条件是否满足,从而触发相应的动作。

项目执行流程

项目启动后,前端输入的规则经后台服务器传递到数据库中,先加载缓存机制(如果缓存中存在则直接使用,否则从数据库中加载并更新缓存),之后从数据库中捞出包、条件、动作等信息,程序加载(import)执行时依赖包,之后将包、条件、动作等信息按照drools语法构建drl文件,将drl文加载到Drools的KieBase中,当有事实触发时,Drools引擎基于规则进行决策。

项目启动->数据传递与存储->缓存机制->加载条件和动作->构建drools规则文件->执行规则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1974449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

雅萌五代射频仪拆机图

雅萌五代射频仪拆机图,相对之前的版本,这个射频仪的头部电极部分,进行结构的优化,整个面比较平整光滑,不容易残留凝胶

allegro学习之一

1)favorite设置界面 2)双单位显示界面设置 3)高亮实心显示 4)自己设置的favorite 5)导线圆滑显示 6)plane的使用场景 7)add to visibility的方法 8)net group的使用 效果图如下&am…

实施运维方案(Word原件)

编写目的: 作为项目运维服务质量管理的总纲,规范和指导公司运维服务质量管理,加强运维服务质量管理的有效性。保证运维服务的整体质量,提升公司运维服务的整体质量水平。使公司能够为客户提供更高质量的运维服务,保障公…

【优选赛事】2024年iCAN大赛AI视觉检测设计挑战赛

iCAN大学生创新创业大赛(以下简称“iCAN大赛”")是一个无固定限制、鼓励原始创新的赛事,自2007年发起至今,得到了广大青年学生的热爱。2010年,iCAN大赛获批《教育部、财政部关于批准2010年度大学生竞赛资助项目的通知》大学生竞赛资助项…

Windows上安装EMQX作为MQTT服务器以及配置MQTTX客户端

一、安装EMQX MQTT服务器 EMQX 是一个高性能、可扩展的物联网消息中间件,EMQX 实现了 MQTT 协议的服务器端,即 MQTT Broker,它负责接收来自客户端的连接请求,处理订阅、发布消息,并将消息转发给相应的订阅者。 下载E…

大模型训练流程解析

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl训练大模型是一个复杂且资源密集的过程,它不仅仅要求大量的计算资源和时间,还涉及多个关键步骤和要素。这个过程需要从数据的收集、清洗、整理到模型的设计与选择,再到模型的训练、评估与优化,…

Netty4自学笔记 (3) - Netty NIO Server和Client 样例说明

全文详见个人独立博客:Netty4自学笔记 (3) - Netty NIO Server和Client 样例说明 Netty4自学笔记 (3) - Netty NIO Server和Client 样例说明更新节奏缓慢,因为每晚学习注意力不够集中,学习进展缓慢。本还给自己找了一大堆其他理由&#xff0…

tof系统标定流程之双频测距与代码详解

tof系统标定流程之双频测距目录 1、双频测距原理2、双频测距流程3、双频测距代码1、双频测距原理 为什么需要双频测距,只用一个频率测距不行吗?实际上一个频率的测距范围有限,以100MHZ/80MHZ/10MHZ/15MHZ的频率为例,其测距范围分别是1.5m,1.875m,15m,10m,频率越低测距范围…

TypeError: ‘dict’ object is not callable 深度解析

TypeError: ‘dict’ object is not callable 深度解析 在Python编程中,TypeError: dict object is not callable是一个常见的错误,通常发生在尝试调用一个字典对象时。这个错误表明代码中存在逻辑错误,可能是将字典误用为函数或方法。本文将…

C++第六篇 模板初阶和STL简介

目录 一,模板初阶 1.泛型编程 2.函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3.类模板(模板类,模板函数) 3.1 类模板定义格式 二,STL简介 1. 什么是STL 2. ST…

[环境配置]Pycharm:Failed to start [PowerShell.exe]

解决方法,点Local旁边的 号,点击Command Prompt,即可在Pycharm中呼出控制台。 如果要修改Command Prompt的启动时访问的cmd.exe的路径,可以去Settings→Tools→Terminal中,修改Shell Path实现,改为cmd.exe…

「AI绘画Stable Diffusion 零基础入门 」AI 绘画SD原理与工具介绍,万字详解新手入门必看!

大家好,我是设计师阿威 AI 绘画原理 想要入门 AI 绘画,首先需要了解它的原理是什么样的。 其实很早就已经有人基于深度学习模型展开了对图像生成的研究了,但在那时,生成的图像分辨率和内容都非常抽象。 直到近两年&#xff0c…

CentOS 8挂载本地源

CentOS 8挂载本地源 1.虚拟机连接centos镜像2.系统查看centos镜像是否在连接上3. 挂载ISO镜像4.配置YUM源1. 备份现有YUM源配置2. 创建新的YUM源配置文件3. 清理YUM缓存并重新生成 5.验证YUM源 1.虚拟机连接centos镜像 2.系统查看centos镜像是否在连接上 [rootlocalhost ~]# l…

【wiki知识库】07.用户管理后端SpringBoot部分

目录 一、今日目标 二、🎈SpringBoot部分类的添加 2.1 使用逆向工程新增User模块 2.2 UserQueryParam添加 2.3 UserSaveParam添加 2.4 UserResetPasswordParam添加 2.5 UserQueryVo添加 2.6 SnowFlake工具类 三、🚆后端新增接口 3.1 /user/li…

【应用层】远程登入管理设备 Telnet

文章目录 Telnet 概述Telnet 认证模式用户等级eNSP 搭建拓扑验证password认证方式登入(不支持空密码登入)AAA认证方式登入 eNSP连接真机环境配置telnetTelnet 配置命令汇总 Telnet 概述 Telnet是一种基于文本的网络协议,它允许用户通过虚拟终…

PHP开发【石头剪刀布小游戏】

石头剪刀布小游戏 玩法超级简单,你只需要在下面选择石头、剪刀或者布,然后提交,系统就会随机生成电脑的选择,告诉你最终的结果哦! 游戏规则: 如果你的选择和电脑一样,那么就是平局。如果你赢…

十一、外观模式

文章目录 1 基本介绍2 案例2.1 Person 类2.2 Computer 类2.3 Player 类2.4 TV 类2.5 StudyManager 类2.6 Client 类2.7 Client 类运行结果2.8 总结 3 各角色之间的关系3.1 角色3.1.1 SubSystem ( 子系统 )3.1.2 Facade ( 窗口 )3.1.3 Client ( 客户端 ) 3.2 类图 4 注意事项5 在…

PointNet点云语义分割

在本教程中,我们将学习如何在斯坦福 3D 室内场景数据集 (S3DIS) 上训练 Point Net 进行语义分割。S3DIS 是一个 3D 数据集,包含来自多栋建筑的室内空间点云,占地面积超过 6000 平方米 [1]。Point Net 是一种新颖的架构,它使用整个…

基于JAVA的陶瓷工厂进销存管理系统的设计与实现

点击下载源码 基于JAVA的陶瓷工厂进销存管理系统的设计与实现 摘 要 时代在进步,我们的生产生活方式当然也要相对应的做出改变了。在今天这样一个信息化的时代,计算机软件已经广泛的被用于日常的办公,仓库的库存管理,企业的人员…

2024年热门开放式耳机评测!悠律、韶音、声阔到底该选谁?

开放式耳机选购技巧篇,可参考选购! 作为一名数码评测博主,这两年用过的开放式耳机不下50款了,市面上的开放式耳机众多,很多人不知道该如何选择,其实选购都是有一定的技巧和规律性的,看配置就能…