Drools Fusion(CEP)独家解读

哈喽,大家好,小哥又与大家见面了,今天来说一下drools中很重要的一个模块drools fusion。小哥根据自己的一次实战经验来给大家讲解,Let's go!

到底什么是drools fusion呢,它是drools用来进行事件处理的一个模块,做CEP系统,CEP(Complex Event Processing)是"复杂事件处理"的缩写,那cep到底又是什么,可以简单的理解为流式数据处理,每条数据看做一个事件,这些事件有时间上的顺序性。本文小哥只讲重点,一些需要注意的地方,和一些实战中的设计思想,具体语法细节大家可以从网上查资料,也可以联系小哥。

1.首先需要注意的是,用fusion,要把插入drools的数据声明为事件,drools处理数据有两种方式,云模式和流模式,默认是云模式,用fusion,需要设置为流模式,流模式和云模式的区别就是,流模式,插入的数据叫事件,有时间顺序,云模式没有,下图是设置流模式的一种方式:

Drools Fusion(CEP)独家解读

Drools Fusion(CEP)独家解读Drools Fusion(CEP)独家解读Drools Fusion(CEP)独家解读Drools Fusion(CEP)独家解读Drools Fusion(CEP)独家解读

2.需要注意的是,要把插入的数据声明为event,默认是fact,可以再规则文件中声明,如下图所示,另外图中的“@expires”用来显示设置事件的过期时间,也就是说过了这个时间,该事件就会从会话中移除,不能再使用

Drools Fusion(CEP)独家解读

3.说一下drools fusion的一个亮点,滑动时间窗口和滑动长度窗口

(1)滑动时间窗口

滑动时间窗口允许用户编写规则,其将仅匹配在最近的 X 时间单元内发生的事
件,用法如图所示,只匹配最近3秒内的数据。

Drools Fusion(CEP)独家解读

看下面代码的输出结果:

Drools Fusion(CEP)独家解读

(2)滑动长度窗口

和滑动时间窗口很类似,其将仅匹配最近几次发生的事件,用法如图,只匹配最近1次发生的事件。


Drools Fusion(CEP)独家解读

4.最后小哥说一下,小哥在项目中怎么用的

小哥的数据来源是rabbitMq,从这里往drools插入数据,每插入就执行一次规则。小哥的规则有三种,一种是数据异常规则,负责计算数据是否是异常数据,另一种是创建一个结果对象,该结果对象里保存着数据异常累计的次数或者时长,最后一种规则是一个定时任务规则,这个规则不停得监测创建的结果对象中的异常累计次数或时长,超过配置的次数或时长时就发短信报警,小哥的业务需要判断一个数据是否异常多少次,或者多长时间,才来决定是否给用户报警,所以才这样设计。口头描述可能不太完善,有兴趣可以和小哥私聊。大家在用的过程中,可能不用这么麻烦,只需要一种规则即可,数据异常规则,达到一定条件就报警。

小哥这里特别说一下,用fusion时,KieSession的创建问题,用fusion,kiesssion要用有状态的,并且不能随便调用dispose来释放资源,否则如果你想取最近10分钟内的数据就取不到了,大家可能会觉得内存吃不消,可不可以用drools的过期机制,小哥经实战,那个事件的过期机制,有点问题,事件过期后,事件句柄还没释放,还在内存中占用资源,容易导致内存溢出问题,关于内存溢出问题这里就不说了,小哥有文章专门介绍,欢迎浏览。

如果有问题,或看不懂的地方,欢迎和小哥或者加群一起讨论

扫码加小哥qq

Drools Fusion(CEP)独家解读

扫码加qq交流群

Drools Fusion(CEP)独家解读