00:00
所以大家可以自己去实现一个拦截器啊,这个拦截器干什么用的呢?你可以不做分类,假如说你就写一个过滤的拦截器。比如说中间就还是判断是否存在IV5,如果不存在IV5这条数据我就不要了。对吧,你自己可以想一想,这种东西应该怎么去实现。对吧,可以自己去想一想啊,当然现在我们写的是类型拦截器,这个你也得区练一下啊。嗯,其实在工程当中,如果用弗姆自定义的时候,拦截器会是最多的啊,像等会我们要讲的source或者think都会比较少啊,都会比较少,因为基本上在form当中,它所提供的有很多对接的数据源,对吧?呃,以及数据目的地就是我们所说的think,它就已经提供了很特别多的种类了,所以说自定义的时候比较少,但是你要是完成一个业务啊,特别业务稍微复杂一点,拦截器一定能用得到啊,所以拦截器这块重点还是要去练一下啊,S跟C呢,大家去敲一敲,主要的是结合着源码中间去顶一点啊,多看一看源码啊这些东西行,那第一个自定义source,呃,Source呢,我们知道是咱们form当中负责接收数据的一个组件啊,他把数据读进来之后呢,封装成我们所谓对吧?呃,除了我们所讲过的,我们看一下这里边我们讲过哪些色色,呃,阿波罗。
01:21
对吧,然后还有这个,还有一个我们放在这对吧,啊,他提供了有很多其他的,还有还有我们看这里边除了这个之外还有很多对吧,那这个你要想知道有多少个,得去看官方文档,人家说的很清楚,每一个应该怎么去配,对吧,类似于黑体的那必须要配的,那下下面呢,非黑体的那就可配可不配的啊,但是你如果工作当中用到了,你还得把那些非黑体的也都干什么。去看一看对吧,去看一看啊好,那我们看一下啊,就是说虽然他提供了很多,但是有时候有的公司他的溯源就非常的奇葩。
02:05
对吧,可能他公司自己写的一个系统啊,或者说呢,这里面其实没有MYS,假如说你想监控这个MYS的一个动态变化的数据,MYS写一条,你要读过来,类似于这样的东西呢,对吧,那可能就需要自定义了,因为它官方呢,Form里边并没有提供类似于MY搜克啊,或者其他的一种方案的一个source,那这个时候公司当中比较奇怪,对吧,那叫自定义啊,叫自定义,OK,那么我们自定义的时候呢,肯定也要实现什么接口啊,或者说继承某一个类,对吧,系统那类那才叫自定义,要不然你凭什么说你这个东西就是一个S,呃,它这个内容在哪呢?在这啊,就在官方文档打开啊,呃,这个时候呢,就不要看这个user guide,对吧,用户指南应该看这个开发者指南。自立一些组件的时候,对吧,点到这个啊,你点到这个开发者,但是下午网速好没有上好。
03:06
这个这么差吗?这个网速呃,它实际上呢,要去继成一个抽象的一个SS一个类,然后呢,实现两个接口。实验两个接口,然后呢,实验相应的方法,主要用这个方法。呃,那么能看啊,这里边有一个,哎,这个人白还记得这个东西吗?SS这边也有啊,如果说你尝试发数据发布出去的时候,那个S也会被用,因为我们要知道其实还可以这样培啊,就多个S呢,对接某一个产能啊,所以呢,它里边也有推理,那这个呢,我们一般不用管,就默认的就好了,也不去做推理零啊这块,呃,然后接下来呢,是咖啡。
04:08
配置信息啊,配置信息,然后process啊process,呃,这两个值啊,我们不用背,因为我们到时候呢,怎么做的呢,就是抓到数据之后,我们在这里边去提一过就好了,这两个参数在S里边,它也是所谓的一个退避,对吧,还刚我还记得我们在think里边是不是提到了它会退避,那S里边大家在想那退避退避什么东西呢。你想嘛,Source它是不是也是要跟外部文件系统对接,要去获取数据啊,对吧?那think之前我们说对比它是从China当中获取数据,而S是不是跟外界对接的时候就获取数据,对吧?那这个推比干什么?看法是这样的啊,如果他获取不到数据,这个S接下来就先停一会。就暂时先不用了,因为我都没有数据了,其实外部系统有没有数据,假如说我们对接的是一个文件,大家想想这个问题啊,我们用t source去扫描一个文件,本地的文件,那么本地文件当中如果有东西写进来了,本地文件会通知S。
05:12
不会吧,那我们怎么能动态的去监控到所有的数据呢?因为source里边相当于维护了一个长轮,它隔一段时间就要干什么去看一看你有没有新数据,对吧?我隔一段时间呢,就要去看一看,好,那假如说我们不发送数据了,没有数据正常的,如果有数据的话,他把数据拿过来,是不是要封装even的,然后写给China,还要开始我还做这些事情,对吧?那这个是要消耗时间的,那我马上又去拉新的数据,立马过来,对吧?那这个倒还好,如果一旦没有数据,他维护一个人群是不是疯狂死循环一种感觉,对吧?那这个退币呢,就是这样子的,如果没有拉到数据。他就会休息一会儿对吧?哎,再尝试去拉取,如果再没有获取到数据,它就会干什么呢?增加一点,这里边呢是增加的,假如说你给个二,它一次加两秒,一次加两秒,假如说第一次零对吧,第二次先休息两秒,再休息四秒啊,再休息六秒,是这样子的,因为我很长时间都没有数据嘛,那我可以休息更长时间,因为我认为你现阶段可能真的没有数据了,对吧,那么在这个地方。
06:24
这还有一个最大值也是一样的,如果说你这样增长下去无穷无尽了嘛,对吧,不能永久增长下去,给你限定一个最大值,但是一般呢,我们如果自定义source的时候,不会这样去控制,我们可以在process方法里面去控制,所以呢,Process方法呢,它就是说每一次获取完数据之后。到这里边来去抓取相应的一个数据,封装写到China里边啊,就抓取数据啊,然后呢,封装的写到China,那我们可以在这个里边去thad.sleep,假如说抓取一个批次之后,我们主动在这里边让它休息一会,是不是也可以对吧?啊,就让它固定起来也可以啊,就这个意思啊,这这是我们所聊这个方法,我看一下这个地方,好啊,行了,呃,那么呢,点到下面有这个south China对吧,自定义的点开,就是我们刚才说的,他要继承一个什么抽象的一个类,然后要实现两个相应的接口吧,这是官方文档,然后呢,之后他也告诉你应该怎么去写。
07:30
啊,应该怎么去写这里边的东西,对吧,但是这个呢,它还是其实我们看的是1.9的文档,但是这个文档呢,其实他也没有更新,就关于定句块,你看啊,等会你根本看不到这个stop stop这个方法。他老版本当中呢,还用了stop方法,呃,然后有pro process process方法,对吧,这个方法最核心的就处理数据,你看啊,它叫干,当然这个自己封装的一个方法啊,获取数据,当然自定义类型的话,他也不知道你到底从哪去获取数据吧,他就随便写了一个方法在这,反正就是说要获取数据,然后呢,封装成什么events,然后看啊封装成之后交给谁了,试试看,想一想我们当时所聊的整个详细的数据流图,Source,接触完数据之后封装成是不是交给了China process,然后交给拦截器,对吧,然后又交给。
08:25
选择器才真正的去开启事物写到太那里的对不对,而自定义source的时候,像事物啊这些东西呢,不要你管了啊,因为它是在最后面,我们搜我们色的这边呢,对于我们自定义用户来说呢,只需要去抓取数据跟封装even交给China就好了。啊,交给他就好了,是这个意思,好,这是我们所看到一个东西啊,呃,那么我们来实现一下,这是我们所说的一个需求啊,就是说它实现了一个过程,对吧?找官方文档去找一下,然后呢,我们要做一个事情,使用接入数据啊,当然这个数据呢,我们也不用什么其他的文件系统,当然你要是写一个so的通信,呃,从这个端口当中获取数据,其实也能写啊,当然没必要,我们在里边呢,就是让他每一个批次呢,自己给定一点数据,我们就来模拟一下这个早数据的过程,然后呢,给每条数据添加前缀和后缀啊,就是说我正常说一个I硅谷,我可能加一个前缀叫free,对吧?啊pre,然后呢,加一个后缀叫S啊随便,而且呢,我们希望通过什么样呢,这个前缀和后缀啊,从配置文件当中给它给进去,因为我们是不是看到里边它有茫茫多的一个配置文件。
09:47
对吧,那它配置文件我们写在那个地方,它到底在代码里面怎么用的,而且有的有默认值,有的没有默认值。对吧,那我们就搞两个,一个前缀一个后缀,前缀呢,我可以给它指定,后缀我就不指定,如果你不加它就没有,你指定了它就有,当然有默认值的是不是也可以改,对吧?类似这样效果我们去看一下啊,啊,因为这样的话就比较灵活,你代码写的就不至于那么死了,配置信息呢,从外面给它干什么,传进去对吧?我们可以从外面给他传进去,那你代码灵活度就高了,如果你什么东西都写在代码里面写死,那你要实现一个另外的功能,你只能干什么,修改代码,重新打包上传吧。
10:30
对吧,啊,你没办法,因为代码已经打包的时候,已经编译成自己码一样,你改那个改不了了啊,只能重新打包,但如果说我们是用配置的方式。给他的,那我只要改配置,重新起我们A人的任务是不就好,对吧?通过这种方式,所以我们就看一下A官方文档当中提供的,有的有默认值,有的没有默认值,那它是怎么做的,对吧?啊,其实比较简单啊,好,那之后呢,我们整个的需求这样的,使用my source对吧?循环创建代码,这个是我们自己造数据,在里边用一个循环造数据就好了,然后呢,编写好之后打包到集群,然后根据我们的内容去创建配置文件,Memory China log think,打一个方台,对吧?那么有一个问题,之前我们看到所有的south China think也好,它必须要配的是不是一个类型。
11:23
那大想我们自定义的时类型,这应该怎么背?就之前类似于什么那个eec,我们类型叫eec t类型叫T,对吧,那我们自定义的source类型,我应该写什么,就全类对全类名以这个自定义的东西,一般都是通过全类名传进去的。啊,这全类名就是我们之前copy reference一个东西,对吧,通过全类名啊,那既然通过全类名能找到,所以我们才要做这个事情,打包到集群啊,扔到from的内底下,它启动的时候呢,加载所有的内下载一个内容,对吧,做这个事情,呃,那下来我们整个的一个分析啊,在这一块其实还好。
12:10
嗯,我们看一下我们等会要做的事情啊。我们制定一个类对吧,要继承实现两个接口对吧,然后呢,核心的有四个方法,第一个看费,我们所看到的那些配置信息,其实都是在这个方法里面进行读取的。都是在这个方法里边去获取的,然后接下来是process啊,这个呢是接收它核心的内容啊,是接收数据封装0EVEN写入China,而其实这块呢,如果说写入China并不准确,应该他是写交给这个China process China process呢还会做很多的事情啊,然后在来使用,我们这块呢,就使用自循环,就先传数据啊,一次呢我造五条,一次造五条OK了,那么接下来还有两个,这两个呢,我们暂时用不到啊,暂时先不用,因为它里边默认的时间啊,是返回一个零,就不做推理,我们可以直接说了,在process里边,我们让现场睡一会,Sleep会这样方式也可以,对吧?啊,这是我们所看到的一个需求整个的内容啊,那接下来我们来实现。
我来说两句