00:00
我们通过一个具体的应用案例,已经了解了怎么样在代码当中使用cep去处理复杂事件,那在这个过程当中呢,我们主要是去检测了用户连续三次登录失败事件啊,其实我们知道啊,这个需求如果我们使用底层API啊,做一个状态编程的话,也是可以实现的啊,但是这个过程肯定就会非常的麻烦,逻辑就会比较复杂,那现在我们使用cep这个代码就非常的简洁,逻辑也非常的清晰,所以我们发现啊,这里面的核心点其实就在于我们定义了一个pattern啊。这个pattern其实就代表了我们要检测复杂事件的匹配规则,哎,所以整个我们这个处理的过程其实就是一个模式匹配的过程,我们先定义这样一个模式,然后呢,把它应用在数据流里边去检测相应的复杂事件。啊,那其实对于link cp而言,确实这个模式的定义就是里边最灵活也是最复杂的一个地方,是它进行复杂事件处理的核心点啊,那所以呢,我们说在fli cp当中有一个pattern这样的一个类啊,那基于它呢,就可以调用各种方法,调用各种API去定义模式,灵活的进行模式的处理,这就是我们所谓的pattern API,所以呢,接下来我们就重点详细的展开去讲解一下pattern API这一部分的内容。
01:29
啊,那在这部分里边其实还有一些比较重要的概念和用法,我们需要去进行扩展,首先呢,我们来介绍一下所谓的个体模式,哎,那什么叫个体模式呢?其实之前我们在这个代码里边已经看得很明显了啊,我们定义这个pattern模式的时候,核心其实就是两个要点,一个就是我们现在不是要检测一组复杂事件吗?哎,那所以首先第一步就是要定义每一个事件到底长什么样子,诶,那所以我们这里边啊,如果要检测三次登录失败的事件,那每一个登录事件对应都有一个判断它的类型是否为失败这样的一个判断条件,哎,那这就是我们对于一个单独事件的匹配。
02:14
然后呢,接下来还需要把这个先后发生的不同事件按照一定的连接词把它们连接起来,啊,那这就是一个完整的模式pattern的定义过程,那所以在这个过程当中呢,最基本的一个组成元素当然就是针对每一个具体事件的提取规则了,哎,那所以我们说这里边每一步针对一个简单事件的提取规则,这就叫做pattern里边的个体模式,哎,那所以我们在这段代码里边定义的每一行,这里针对简单事件的描述都是一个个体模式。可以认为每个个体模式都应该要接收一个对应的事件啊,那它的定义的方法呢,我们看到啊,它都会以一个相当于连接词作为开头啊,比如说begin,或者说next。
03:07
啊,那其实我们知道这是pattern对象的一个方法啊,那begin的话,它是直接在pattern的伴生对象里边调用的一个方法。那我们知道伴生对象里面的方法呢,其实就类似于Java当中的静态方法啊,那所以这个调用的作用主要就是要返回一个真正意义上的pattern对象啊,那然后接下来我们调用的其他的方法next,哎,那我们看直接调用的就是pattern这个类里边定义的方法了,当然了,他们最后的返回值都是一个pattern对象。所以我们可以看到啊,在这一组pattern的定义过程当中,每一次连接词的调用呢,呃,最后返回的都是一个pattern啊,就是基于pattern在不停的转换,然后又定义出了新的pattern,所以我们就把它叫做pattern API嘛。而在我们每一次调用这个连接词的过程当中呢,这个方法里边必须要传入一个string类型的参数,哎,那这样一个参数其实就指明了当前个体模式的名称,诶所以说我们知道这个个体模式的名称,它的主要作用是用来干什么的,其实就是唯一的标识当前的这个事件,那所以后边如果说我们检测到了它想要在检测到的复杂事件里边把它拿出来的时候,那怎么办呢?诶,那就把它保存在一个map数据结构里边,然后接下来当时我们定义的那个名称就是它在map里面的K,而对应的事件就是它的值,哎,那所以这个就是我们知道它底层的这个数据到底是怎么去保存的了。
04:44
那除了前面我们需要去指定它的一个名称之外,后边呢,一般还要跟上一个筛选条件,我们这里边是直接用一个点where来指定当前每一个个体模式到底是有什么样的条件约束的。这就是我们具体的匹配规则,哎,所以整体来看的话,个体模式的定义还是非常的简单。
05:06
前面我们说的这个连接词呢,可以认为它主要表述的是每一个个体模式它们之间连接的关系,哎,所以针对每一个个体模式而言,我们可以不考虑这个连接词到底是什么,那我们考虑什么呢?主要就是它的名称到底是啥,然后呢,它的过滤条件,它的匹配规则到底是什么?哎,那所以对于一个个体模式而言,它的条件其实就是最重要的一个要素,哎,那除了这个条件之外呢?啊,另外它其实还可以定义一个东西,比如说我们点进去看。看到pattern这个类里边,除了之前我们看到的类似于next,还有not next啊,Followed by这些明显都是连接词之类的东西吧,除了这些之外呢,还有一些times gray one or more optional,诶,这些又是些什么东西呢?我们知道time如果表示时间的话,是不能加复数的啊,那加上S的时候,复数其实是表示次数,哎,那所以这里其实是指当前的这个个体模式对应的事件要发生多少次。
06:16
哎,那所以这其实就表示我们个体模式里边呢,不光只能接收一个事件,还可以加一个描述,让他可以循环的接收多个事件啊,因为当前我们这个个体模式里边,条件过滤,条件匹配规则是固定的嘛,那一旦固定了一个规则之后,假如后边还可以让他选取多次的话,这不就相当于是同样的条件循环执行多次吗?筛选出来的就是相同类型的多个事件。所以对于这样的一些描述啊,这样的一些方法调用,这就叫做个体模式的量词啊,那所以针对个体模式而言呢,它主要有两个重要的要素,一个就是前面我们说的它的筛选条件,另外一个就是量词。
07:04
这是关于个体模式的一个整体介绍,接下来我们就单独的说一说个体模式的量词和条件。
我来说两句