网站首页 > 技术文章 正文
刚才入门案例都已经开发实现完成了,并且效果也已经运行出来了。在入门案例开发过程当中提到了一些概念,比如规则库、工作内存等等。在这个小节就集中来说一下规则引擎的构成。因为前面在开发的时候都是相当于是分散了再来说的。
在这集中来说一下规则引擎的构成。大家可以看到这个地方已经写出来了规则引擎,规则引擎主要由三部分构成。
·第一部分叫做working memory,就是前面提到的叫做工作内存。
·第二部分叫做ruler base,翻译过来叫做什么?叫做规则库。
·第三部分叫做inference engine,翻译过来叫做什么?叫做推理引擎。
前面提到工作内存是什么?它是工作,是dros规则引擎的一部分。工作内存起个什么作用?其实就是用来存放。相当于fact就是事实对象的这么一块内存区域。比如前面在入门案例里边当时是这么写的,回过头来来看一下当时是不是扭了一个out对象,然后是调用了开e section对象的音色的方法,音色的明显就是插入。
这个是插入到哪去?其实就是插入到了工作内存里面去了,插入到工作内存就是working memory。这是规则引擎非常重要的一部分,它的作用就是用来存放fact的,就是事实对象的。比如在入门案例里面order对象就属于fact的对象,用来存放这些对象的。
为什么一定要把on的对象放到工作内存里面去?因为一会再进行模式匹配的时候规则引擎会使用到这些对象,就会从工作内存里面去查找来进行匹配。所以工作内存是规则引擎第一个组成部分。
第二个叫做ruler base,翻译过来叫做什么?叫做规则库。规则库是什么?它也是规则引擎的一部分。这里边存放的是编写的这些业务规则。比如在drl文件里面一共是不是编写了四个规则?而程序在运行的时候这些规则都会被加载到规则库当中来准备使用。
首先会把它放到规则库里面去,而规则库可以把它简单的就想象成什么?就类似于数据库,但是它是在内存当中的这么一块区域,这叫做规则库。这里边存放的是编写的业务规则。这是第二部分内容。
第三部分就是推理引擎,推理引擎是具有模式匹配、执行、推理这些功能。
推理引擎比较复杂,内部又分成了三部分,也就是推理引擎又包括三部分。哪三部分?一个叫做匹配器,进行模式匹配的。还一个dend,这个叫做e城。还有一个叫做execution ending,这个叫做执行引擎。
这到底都是什么意思?匹配器很明显就是进行模式匹配的。具体怎么匹配?大家想一下,是不是在程序运行的时候,在单元测试里边,是不是把order对象插入到了工作内存里面去。插入进去之后是不是调用了这么一个方法叫做fair all rulus,这个就触发规则了。
但是并不是所有的规则都要触发,哪些规则需要触发?规则引擎就会从工作内存里面将对象拿出来。因为插入的是不是就是这个对象,所以首先会从工作内存里边把对象取到,取到之后再从规则库里边把这些规则取出来。因为这些规则是不是都已经被加载到了规则库里面,所以会从规则库里面把这些规则取出来,通过匹配器,就是匹配器推理引擎里边这一部分叫做匹配器,然后来进行模式匹配。
比如现在插进来的auto对象的original price是不是五百?五百先匹配这个能匹配上吗?很明显不满足要求,所以再匹配这个是不是也匹配不上?如果设置的是五百,是不是会匹配到具体的匹配的过程?模式匹配的过程就是由匹配器来完成的,会进行模式匹配。
假设传进来的是五百,original price是五百,这样经过匹配器匹配之后是不是就会匹配成功这条规则?这个时候就会把第四个规则加入到一个空间里面去,就是一程。所以一程里边存放的规则都是将要执行的规则,就是匹配成功的规则会放到一程里面去。
这也是一块空间,整个都属于工作引擎,规则引擎里边的一块空间叫做一程。这里边存放的是经过模式匹配之后匹配成功的这些规则会放到一程里面去。放到e城里面去之后是不是希望这些匹配成功的规则要执行?是不是要执行这部分?怎么执行?就会由execution and就是执行引擎来执行具体的规则。
所以大家可以看到刚才提到的一些概念的执行过程就是这样的,out对象首先是不是插入到工作内存里面去,然后编写的那些规则会被加载到规则库里边去。程序执行的时候,推理引擎会从工作内存里边把out对象取出来,从规则库里边把规则取出来,是不是来逐一进行匹配?通过谁?就是通过匹配器来进行模式匹配。
匹配完成之后有一些规则是不是就能够匹配成功了?匹配成功的这些规则会被放在这个,真的翻译过来叫做翼城,放到这里面来,这里边存放的就是匹配成功的规则。最后由执行引擎来执行这些规则。
这就是规则引擎drose涉及到的一些构成部分,构成部分以及它们之间是如何协作的。刚才我也描述了一遍,通过这个图就能够反映出来。这是关于小节,因为做了一个入门案例,这里边可能大家会有很多疑问,因为一开始入门案例有很多细节都没有讲到,只是大概听了一下,所以在小节部分需要来系统的来整理一下工作内存规则引擎的构成部分以及这些构成部分之间是如何协作的。
猜你喜欢
- 2024-11-16 drools的类型声明(Type declarations)
- 2024-11-16 规则引擎drools-实战个人所得税计算器
- 2024-11-16 基于 Flink 和 Drools 的实时日志处理
- 2024-11-16 开源、强大的工作流引擎:camunda入门介绍
- 2024-11-16 53-SpringBoot整合Drools_2(springboot整合zuul)
- 2024-11-16 开启灵活开发编码模式:规则引擎drools——LHS部分
- 2024-11-16 AI应用企业落地方法论:践行财务共享AI审单项目
- 2024-11-16 开启灵活开发编码模式:规则引擎drools——RHS部分
- 2024-11-16 开启灵活开发编码模式:规则引擎drools——高级语法global
- 2024-11-16 43-drools基础语法(比较操作符_memberof)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)