Esper工作原理说明

规则生成逻辑

相关代码: com.espertech.esper.core.service.EPAdministratorImpl

Filter语句处理相关逻辑: com.espertech.esper.filter

view创建及处理相关逻辑: com.espertech.esper.view

通过调用epService.getEPAdministrator().createEPL()方法来创建规则。

 

新建一个规则时,esper会对epl语句进行解析,生成一个EPStatement对象,并启动规则。在规则启动过程中,会提取出规则中的filter语句,转化生成FilterValueSet,将其保存到engine中,用于后续匹配检查处理。

对于统计类规则,我们使用的是externally-timed window。除了处理filter语句,还会在EPStatement对象内部维护一个ExternallyTimedWindowView,内部有一个TimeWindow对象,内置一个队列,用于保存数据。

filter语句处理

Esper工作原理说明_第1张图片

统计类规则,创建view

Esper工作原理说明_第2张图片

image.png

事件处理逻辑

相关代码: com.espertech.esper.core.service.EPRuntimeImpl

聚合处理相关逻辑; com.espertech.esper.epl.agg.service

通过调用epService.getEPRuntime().sendEvent()方法来发送事件。

对于普通模板类规则,当有一个事件过来时,遍历当前engine中的filter对象,找出match的规则,之后,遍历所有match的规则,进行处理,取出规则中的输出,触发回调函数,处理结束。

统计类规则,当有一个事件到来时,前面处理流程跟一对一类似,但在match处理时,会根据时间函数,实时清理队列中的过期数据,写入新数据,同时更新聚合结果。当聚合结果满足条件时,触发回调函数,处理结束。

普通模板事件处理

Esper工作原理说明_第3张图片

Esper工作原理说明_第4张图片

Esper工作原理说明_第5张图片

统计类模板view部分事件处理

Esper工作原理说明_第6张图片

Esper工作原理说明_第7张图片

Esper工作原理说明_第8张图片

Esper工作原理说明_第9张图片