欢迎来到天天文库
浏览记录
ID:34722862
大小:56.51 KB
页数:8页
时间:2019-03-10
《esper学习之十四:pattern》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、前述的几篇关于EPL语法的文章,如果各位都掌握得很好,那基本上应付不少业务场景应该说是轻轻松松。但是总有那么些复杂场景只靠那点基础语法还是搞不定,比如说:某个用户在请求登录服务时,n秒内连续m次未登录成功,可视为该ip在暴力破解密码。又或者:用户在页面上的操作间隔超过n秒即认为该用户已关闭该网页。也许上面的几个例子不够好或者已经有别的方式实现,但是Esper确实能够将其抽象成多个关联的事件进行处理。像这类具有关联性事件的处理,即是本篇的中心内容——Pattern,它就像一个我们自定的模板,如果事件按照模板进入引擎,就会触发监听器,
2、我们就能捕捉到信号并进行接下来的处理。 今天这篇主要讲讲一些基础知识以便领大家入门,具体的语法下篇会有详细说明。1.PatternAtomsandPatternoperatorsPattern是通过原子事件和操作符组合在一起构成模板。原子事件有3类,操作符有4类,具体如下:原子事件:1).普通事件:包括POJO,Map,Array,XML2).时间事件:包括间隔n个时间单位、crontab3).自定义插件:用于观察特定事件的发生操作符:1).重复操作符:every,every-distinct,[num]anduntil
3、2).逻辑操作符:and,or,not3).顺序操作符:->(Followedby)4).事件生命周期操作符:timer:within,timer:withinmax,while-expression,自定义插件关于操作符,自然会有优先级,具体如下:PrecedenceOperatorDescriptionExample1guardpostfixwheretimer:withinandwhile(expression)(incl.withinmaxandplug-inpatternguard)MyEventwheretimer:w
4、ithin(1sec)2unaryevery,notevery,distincteveryMyEventtimer:interval(5min)andnotMyEvent3repeat[num],until[5]MyEvent[1..3]MyEventuntilMyOtherEvent4andandevery(MyEventandMyOtherEvent)5ororevery(MyEventorMyOtherEvent)6followedby->every(MyEvent->MyOtherEvent)上面的内容各位可以先有个印象,
5、方便理解之后的详解。2.PatternFilterExpressionPattern的Filter表达式和普通的表达式没有区别,我就不展开讲解了,各位看看下面几个例子就好,除了Filter之外的东西暂时不用关心是什么意思。1).everye1=RfidEvent->e2=RfidEvent(assetId=e1.assetId)2).everye1=RfidEvent->e2=RfidEvent(MyLib.isInRadius(e1.x,e1.y,x,y)andzonein(1,e1.zone))3).every(RfidEve
6、nt(zone>1)andRfidEvent(zone<10))3.ControllingEventConsumption 上面说到了Filter,因为Pattern可以由多个原子事件组成,那么Filter自然也会有多个,正常情况下,所有的Filter都会对进入引擎的事件进行判定,但是我们也有只需要判定一次的时候,只要满足了某个Filter,那么其他的Filter就不用管这个事件了。Esper考虑到了这个需求,我们只需要在Filter表达式后面加个@consume注解即可,此注解可以跟随数字,表示过滤的优先级。默认优先级
7、为1,数值越大优先级越高。为了结合上面几节的知识,我给了个完整的实例:[java]viewplaincopy1.package example; 2. 3.import com.espertech.esper.client.EPAdministrator; 4.import com.espertech.esper.client.EPRuntime; 5.import com.espertech.esper.client.EPServiceProvider; 6.import com.espertech.esper.cli
8、ent.EPServiceProviderManager; 7.import com.espertech.esper.client.EPStatement; 8.import com.espertech.esper.client.EventBe
此文档下载收益归作者所有