Drools5当中提供了两个对象与规则引擎进行交互: StatefulKnowledgeSession
和 StatelessKnowledgeSession。
StatefulKnowledgeSession
顾名思义,就是有状态的会话,在推理过程中可以记录对象推理的中间状态。StatefulKnowledgeSession对象是一种最常用的与规则引擎进行交互的方式,它可以与规则引擎建立一个持续的交互通道,在推理计算的过程当中可能会多次触发同一数据集。在用户的代码当中,最后使用完 StatefulKnowledgeSession 对象之后,一定要调用其 dispose()方法以释放相关内存资源。
规则引擎可以接受外部插入(insert)的业务数据——也叫 fact,一个fact对象通常是一个普通的Java的POJO,一般它们会有若干个属性,每一个属性都会对应
getter和 setter方法,用来对外提供数据的设置与访问。一般来说,在Drools规则引擎当中,fact所承担的作用就是将规则当中要用到的业务数据从应用当中传入进来,对于规则当中产
生的数据及状态的变化通常不用 fact传出。如果在规则当中需要有数据传出,那么可以通过
在 StatefulKnowledgeSession 当中设置 global 对象来实现,一个 global 对象也是一个普通的Java 对象,在向 StatefulKnowledgeSession 当中设置 global 对象时不用 insert 方法而用setGlobal方法实现。
在将FACT插入规则引擎后,StatefulKnowledgeSession 需调用 fireAllRules()方法触发所有的规则执行,最后调用 dispose()方法将内存资源释放。
StatelessKnowledgeSession
StatelessKnowledgeSession的作用与 StatefulKnowledgeSession 相仿,它们都是用来接收业务数据、执行规则的。事实上,StatelessKnowledgeSession 对StatefulKnowledgeSession做了包装,使得在使用 StatelessKnowledgeSession 对象时不需要再调用 dispose()方法释放内存资源了。
因为 StatelessKnowledgeSession 本身所具有的一些特性,决定了它的使用有一定的局限
性。在使用 StatelessKnowledgeSession 时不能进行重复插入 fact的操作、也不能重复的调用fireAllRules()方法来执行所有的规则,对应这些要完成的工作在 StatelessKnowledgeSession当中只有 execute(…)方法,通过这个方法可以实现插入所有的 fact并且可以同时执行所有的规则或规则流,事实上也就是在执行 execute(…)方法的时候就在 StatelessKnowledgeSession内部执行了 insert()方法、fireAllRules()方法和 dispose()方法。
在告警关联分析中的应用。
在告警关联分析中,插入规则引擎的FACT就是产生的实时告警对象。因告警是随着时间持续递增的,是一个动态的过程。为了分析持续递增的大量告警间的相关性,需要对产生的告警进行连续的推理分析。
在实际的应用中,我们有两种方式对对大量告警进行推理分析。
一是用StatelessKnowledgeSession,将所有告警导入规则引擎后,进行推理分析,然后导出推理结果。每隔一定时间后,再将所有的告警导入规则引擎,再进行推理分析,循环执行上述过程。这种方式适合总告警量不太大的情况。但在实际中,告警数量往往较多。所以在实际应用中,这种方式不太实际。因告产生的警数量巨大,在将FACT导入规则引擎的过程中,规则引擎在构造鉴别网络在的时候,会花费大量的时间并消耗大量的内存空间。在实际应用中,规则引擎常常由于耗费的内存太多而造成内存溢出。即使内存不发生溢出,也会因为在构造鉴别网络所耗费的大量时间,而让人难以忍受,更谈不上满足告警上报的实时性要求了。
结合在实际应用中的业务需要,综合StatelessKnowledgeSession和StatefulKnowledgeSession的特点。在实际的告警关联分析中我们往往采用第二种方式。即使用StatefulKnowledgeSession进行规则的推理,在推理过程中,持续插入(insert)新产生的告警对象(FACT)到规则引擎中,然后调用fireAllRules()进行推理分析。注:一次插入的告警对象不宜过多,不然会找造成较大的时间和内存消耗。在调用规则引擎fireAllRules()方法进行推理分析的过程中,应尽量将规则引擎中的无用的数据retract掉,保证规则引擎中的数据量不要太多,否则还是会出现消耗内存过大的情况,从而最终造成程序内存溢出。
因告警量太大,在实际应用中可考虑实现两个规则引擎对告警进行推理分析。首先由第一个规则引擎在告警处理平台对一段时间比如(XX小时或XX分钟)的数据进行预推理分析,这一步的目的主要是减少大量冗余告警(对推理无用的告警)的数量,并产生推理分析的中间结果。第二步,在第一个规则引擎处理完成后,将数据导入到第二个规则引擎中,进行二次推理。在第二个规则引擎中保存第一次推理后产生的所有告警数据,保证引擎进行充分的推理,然后输出推理结果。上述推理过程应周期触发,保证上报的及时性要求。
分享到:
相关推荐
规则引擎Drools在J2EE项目开发中的应用...
drools drools drools drools drools
规则引擎Drools在J2EE项目开发中的应用.pdf
drools规则引擎在促销系统中的应用.pdf
drools最新版本学习资料,里面系统的介绍了drools规则引擎的简介以及集成到项目的教程内容。欢迎下载,收集不易,欢迎点赞。
Drools开发最全中文版技术指南。 Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版! drools 中文文档 规则引擎 drools6 drools7 Java
Drools7_PDF教程 Drools中文文档 内容全面。...1. 内容更加全面,更多细节,更多知识点全部在新版本中有所体现,并且会附上小编做的例子 ,更多内容不断更新中 2. 目前国内最全的Drools中文文档。也是目前国内唯一一本
Drools规则引擎应用分析,这是我学习drools找到的文档。
Drools在智能批改中的应用,闫光,李文生,虚拟实验是远程教学的一种重要手段,是网上教学内容的一项重要补充。然而由于批改的工作量较大,学生的实验不能及时得到批改,降
这个是本人在研究drools flow总结的报告,希望对大家有帮助
drools
drools5.1_开发中文文档drools5.1_开发中文文档drools5.1_开发中文文档drools5.1_开发中文文档
drools4.0.7 utf-8中文乱码
drools 最新文档 7.10 规则引擎中文文档,含 规则可视化操作说明,规则配置说明等; Drools 实现和提供了 Rete 算法;也曾提供 Leaps,但因为它无人维护而撒销了。Drools Rete 实现也被称为 ReteOO
Drools4.0官方使用手册(中文).pdf
drools开发中文文档!
后面通过搭建具体的项目并结合springboot框架联合使用Drools的相关知识包括决策表的使用,囊括一般项目中所需要的知识点,理论结合实际,让真正入门到熟练。 1 Drools简介1.1 Drools的作用1.2 使用规则引擎的优势1.3...
drools中文文档pdf完整版本,drools 新版本功能,技术开发细节及api说明
Drools中文使用教程 Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎...业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。
规则引擎Drools使用手册(中文),对于学习和研究Drools技术很有帮助的~~