00:00
在整个的流程我们都已经搭建起来,都已经处理完了,那接下来要做的其实就是具体实现这两个方式了,首先我们要实现的是一个实现自定义的。呃,超时事件处理函数,当然这是一个函数类了啊,我们要实现的是这这样一个接口,所以这里面是public static class all the timeout select,实现这样一个方,呃,实实现这样一个类,对吧?我们这里边要去实现的接口implementment,一个pattern。Timeout timeout function,大家看到这里边的类型是不是也是有一个in,有一个out呀,跟那个pattern sla的function是不是差不多,然后里边要实现的方法呢,是一个timeout方法,然后大家看这里边的这个参数是不是也差不多,也是一个map呀,也是嘛,我们当前检测那个数据,尽管你是料到了开头没料到结尾只检测一部分,那一部分是不是也要保存在一个map里边啊,也是对应一个名称啊,一个K啊,然后检测到的那个事件保存在这个例子里边,对吧?啊这样的一个形式,然后另外它多出来的一个参数是一个对超时的时间戳啊,就是这里边,如果我们想获取当前的这个超时时间戳的话,这个也是可以去输出的啊啊,所以最终输出的类型是out,对吧,啊,这还是它必须有一个返回类型。
01:27
那大家知道如果要是如果用那个flat select的话,是不是就可以,哎,对,可以输出多条对吧?VO的那个类型啊,我们用out.collect输出就可以了啊,那这里边是输出输入的类型是不是就是当前的order event啊,对吧,每一个事件的类型啊,然后输出的类型非常简单,是不是想包装成all the result输出,诶这样的话,里边必须要实现的是一个timeout方法。那么在这个timeout里边,我们现在想要拿到的其实就是最后要包成order result的话,是不是就是拿到一个订单的ID就可以了,对吧?然后这个订单我们知道当前就输出一个timeout状态就可以了啊,那所以这里边我们应该最关心的就是要获取一个长整型的订单ID,超时的订单ID对吧?那么这个这个ID怎么拿,是不是pattern里边啊,注意pattern里边get的时候。
02:28
Get的这个K,你能get pay吗?前面我们不是有create有有pay吗?有两个字段对吧?可以get pay吗?这肯定不行,对吧?因为你超时事件是不是有开头没结尾,是不是只有create没有配啊,哎,所以这里边大家注意啊,你要是get pay的话,肯定这里就控制帧异常了,对吧?拿不到嘛,拿出来是空嘛,所以这里边我们其实必须只能去get create,然后拿到的数据大家知道现在也是。呃,单利模式对吧?个体模式里边只有一个结果,是不是直接ER next或者是直接GET0就可以了,拿出来就完事了啊,另外我现在要的是order ID,所以说get order ID拿到,那最后我要输出的这个order result里边是不是就是当前的这个order ID啊,再加上一个当前的这个状态,这个状态就是timeout对吧?当然你可以再加上一个当前的超时的时间戳,我是不是直接可以把这个超时时间戳打印出来啊,对吧?啊,就相当于是在这个状态里边我能看到到底是什么时间,它这个就超时了。
03:35
这是超时的这个处理啊。然后接下来还有一个就是实现自定义的啊,那就是正常匹配事件处理函数啊,那这个其实跟前面是一样的,Static class,我们这里边定义的应该是一个order select,哎,应该叫order pay,对吧?Order pay select implement,当前是一个pattern select方式对吧?里边的数据类型是不是还是一样啊,输入all the event,输出all the result,大家检验一下上面,诶这里边主要还是输出的类型有问题,对吧?当前输出的类型是不是应该跟主流,这里边主流的类型是不是应该是拍LA方式的输出类型啊,大家注意啊,这里边的这个类型和我们这里的类型是不是本来可以不一样。
04:33
因为这里是不是只代表了测输出流的那个输出类型啊,因为timeout这个输出总是在测输出流里边的,对吧?啊,所以这个是可以不一样的啊,我们把这要改成输出的类型叫做order result,这个就没问题了,下边要必须实现的是一个select方法啊,那大家知道同样的啊,我把这个copy一下。大家想到前面我们这里边是一个太out太out的order ID,现在是不是就是一个成功支付的order ID啊,那这个成功支付的order ID不用这个create了,其实我是不是从这个配里边也可以把它拿到,现在就可以拿到配了,对吧?啊或者你用create和配都行,因为大家知道现在是成功匹配,成功检测是不是两个都有啊,Map里面都保存了,然后接下来我们这个把配的order ID放在这儿,当前的这个状态呢,就没有时间戳了,你只能写出一个状态,就是成功支付对吧?Hit,诶,这就是我们当前处理的一个流程。
05:36
啊,那接下来我们把这个代码运行一下,看看这个效果怎么样。整个的过程比之前相跟之前相比的话,就是多了一个处理超时事件的过程,对吧?而且我们现在最关心的其实就是这样的一个超时事件啊,其实正常正常支付成功的那个的话,呃,那个状态反而我们不太关心对吧?因为接下来应该不会对它做做更改了嘛,好,那接下来大家看一下,好大部分都是成功支付对吧?诶大家看到这里边有超时的34756这个订单是不是超时啊对吧?然后我们再看哦,还有一个34767这个订单超时,我们看一下这里面其实有他这个超时时间的啊,我们先找这个34756。
06:23
搜一下34756CREATE,大家看到是呃8430913创建的,这是一个秒,然后大家看到它的超时时间是什么。是不是就是8431813啊,后面000是毫秒补了三个零吧,哎,那这个1813跟它相比是不是增加了。九百九百秒是不是就是15分钟啊,诶,所以他的超时的这个时间是不是就是刚好15分钟之后啊,所以这个很自然大家能想到啊,我这里边搜这个订单,确实没找到他的那个支付时间对吧,没有找到它的对应的那个配啊,这里边大家看到没有支付信息,那当然它就超时了,这个是没问题的啊,然后还有一个34767,我们再看一眼34767GREAT,大家看到它是0949对吧。
07:13
0949,所以超时时间是不是就是1849加九百九百秒啊,诶,然后大家看一下再找一下,诶,它下边有支付的信息。但是支付的信息,你看他是什么时候是不是2021才支付啊,所以它是不是也是先超时了才支付,它是不是也是一个超时的状态啊,啊,所以这个就是我们想要去处理的这个结果啊,这里我们是只是直接做了一个超时的报警,那大家想如果要是实际的这个生产环境里边,我们可以怎么样,是不是直接在这个检测到的时候,我不要去直接这个控制台打印这个报警信息,我是不是可以直接把这个状态更新到我们的那个数据库里啊。直接把它的状态是不是更新成一个太帽子就可以了啊,大家想接下来我如果要是有对应的那个数据,这就是相当于一个状态的实时更新,对吧?如果又有数据去请求啊,想要去做这个订单操作的话,我会发现哦,现在这个订单已经超时了,那是不是现在就直接就就不允许这个订单操作了,就直接关闭了,对吧?啊,这就是一个你如果想要去实时更新的话,自己再单独追加一个像数据库的一个业务,数据库的一个状态写入就可以了,这就是利用cep实现了订单超时事件的检测。
我来说两句