00:00
好,那我们看一下这个自定义的一个拦截器啊,自定义一个拦截器啊,这块呢,就是类似于form一样,你要对这个数据要增删,对吧?啊,或者要过滤的时候也会用到这个内容不要OK,那这个拦截器呢,它是生产者这边的啊生产者而且是0.10版本才有的,那既然你要是要自定义的话,是不是应该要实现一个。接口或者说继承一个类啊,对吧?啊,那这个接口呢,就相于叫producer。你看三它的应用场景就不用说了,对吧,修改消息啊,或者过滤啊等等这些东西啊,拦截器嘛,本身就起这些作用的,那核心的有这三个方法。看读取配置信息的啊,跟from那个我们自定义那个think啊,那些东西都一样,对吧?啊里边可以读取配置信息,然后on send。你看on的这个方法,它传进来一个叫producer record。他其实就是最核心的那个方法。它其实就是最核心的那个方法,因为拦截器拦截的。
01:02
就一行一行的数据吧,就类似于当中拦截器传进来的数据类型叫even的吧,啊返回值呢。Even的,那这个返回值呢?还是他自己吧,对吧,还是这个类型,因为你只是拦截,不是说把它类型变了,那你能把类型变了,接下来传输过程当中不有问题了吗?对吧?啊所以呢,只是会改变里边分区啊,其他的一些内容啊,其他内容OK,那还有。返回值就是这个地方发送成功之后,不光会发到之前,或者丢那边一个回调函数里边,这里边也有啊,也能收到这个拦截器,这如果说你有拦截器的话啊,它也会同样的能收到这个消息啊,能收到这个消息最后呢,就。啊,方法里边呢,就是正常的,你在初始化里边开辟的一些资源,对吧,最后做一个收尾工作啊,最后呢,调一次调一次,同时他还会做一些清理工作啊,还会去做一些清理工作,是这意思啊,那我们来做一个案例,那这个案例呢,我们来看一下这个案例的需求,我先打开一个这个模板。
02:10
啊,打开一个模板,那在这里边呢,我们要实现一个。多个拦截器形成拦截器列对吧?啊形成拦截器列,第一个拦截器。会在消息发送前将时间桌加到Y6的最前部。也就是之前假如说我发这个爱硅谷,以前不是发的爱爱的硅谷一,爱的硅谷二一直到九吗?现在呢,我前面想加一个什么。时间多。啊,什么153等等等等L括号,然后再把这个数据啊,把它内容变一下,加一个时间桌啊就做这个事好第二个拦截器。假如说你一个批次数据,就是当前这个生产者所有的数据发送完成之后。发送完成之后,我需要你。
03:00
更新一下成功发送的条数和失败发送的条数,这是什么意思呢?就最终的在控制台上面,我希望看到,诶成功的十条,失败了零条,最终呢,就是所有的数据发完之后,假如说生产者那个代码走完之后,给我出来一个什么。这个消息啊,就做这两个事儿啊,都在拦截器里面去做。都在拦截器里面做,哎,就这两个东西好,那整个的一个需求是这个样子,来看一下啊。前面呢,我们是发送的数据,首先呢,你要自定义拦截器对吧?啊,自定义拦截器这个内容一个是时间戳的,一个是计数的啊,一个计数的返回是code的,统计成功的次数或者失败次数啊,在关闭整个生产者的时候打印这个次数,这是我们所说的刚才两个逻辑,最终从数据流上来说应该是这个样子的。假如我们发的是MESSAGE0到十对吧?啊,是一条数据,接下来经过这个拦截器之后,这个数据变成了。加了时间戳这个样子吧,那之后还是时间戳,但是呢,在这里边要去统计一个一个的累加这个条数,对吧?啊累加条数啊累加条数,最终呢,把这个东西打印到。
04:10
控制台啊,也就做这个事儿了,好,那我们要想一下这个问题,这个东西应该好做一点。那就是对于我们刚才看到的on send的方法进行改造吧。对吧,On send方法进行改造,但是这个需求怎么做?对吧。第二个拦截器里边的一个counter奇数的这个东西怎么做?对,这个里边刚才我们看到的有一个什么方法。因为这块呢,可以获取到这条消息发送什么成功与否啊,如果返回值这个不为空。说明什么?
05:01
发送成功的对吧?啊,如果说异常不为空,说明发送失败了,那我们就根据其中的某一个参数,可以判断它成功或者失败了,这个全局的力量去干什么。去累加啊去累加,但是我们所知道的,那最终打印呢。对吧,那这两个方法是不是一直被循环调用呢?打印了。注意它调用一个这个之后,是不是给他一个防回值,调用一个给他一个防回值啊,对吧?啊好,那也就是说每条消息呢,它会经过一次拦截器,这个没有问题,那接下来问题打印呢,最后他要把这个东西打印到控制台,如果说我们在这个里边打印,它是最终出来一条结果吗。是每一条数据做一个累加,第一次呢SUCCESS1,然后L0,然后第二次呢,SUCCESS2A0是不是打印好多次啊,我们最终要打印次,那这个打印应该放到。
06:00
是不是应该放在close里边,最终做一次打印吗?啊,他最后的时候会这一次吧,啊就做这个事了啊做这个事了,好,那我们这个是我们整个的一个逻辑啊,一个逻辑。
我来说两句