00:00
同学们,我们接下来讲一下批量确认啊。刚才单个确认呢,我们代码已经写完了,发现是用时722毫秒时间,明显的用时时间很长啊。那我们批量发布确认,相比于上面那个肯定是会快很多,但是呢,它也有一个极大的缺点,就是当发生故障导致发布出现问题时,不知道是哪个消息出现了问题,因为批量的呢。批量的,给人感觉就是所有的消息你全都发布,但是一旦某个消息出问题,自然就不知道是哪个消息有问题,而我们单个发消息虽然性能慢一点,但是他发一个确认一个,所以它不会出现问题,对吧?至少发的时候你出问题了,我马上就知道你出问题了。而批量就不一样,批量呢,是一群人全都发出去了。那么导致。
01:00
真的出了问题的时候,也不知道是谁出了问题,但是呢,性能肯定比上面的。单个确认要高一些。那么这个不能证明啊,我们只能把代码写一写。代码写写呢,就能证明确实是批量发布,时间更短一些。来,我们写一下。发布消息批量啊,在咱方方法直接用它的,接下来呢,在这个单个的下面再写一个批量。发送。发布确认。我们写一下啊,Public static vod。批量。抛出异常。前面代码呢,都一样都一样啊,所以我们就不要挨个去写了,例如声明队列呀,发布确认呢,开始时间呢,这些代码实际上是一模一样。对。以及将来结束打印时间,哎,它也是一样。
02:02
中间时间差的相减也是一样的,唯独这里边不一样。之前我们也是批量的发送,但是并不是批量的确认是吧。这次呢,我们是批量发送消息,并且是批量。呃,确认发布确认。那之前怎么写呢?之前用的是我们的1000条数据进行复循环。便利完了,每遍历一个,就要发一次消息来发一次。发。这就是发消息完了呢,交换机不用写,哎队列名字呢,而且是队列名字,而且是什么呢?是。随机的。是这个是随机啊UUID啊UUID生成完后面咱就没再写什么东西了,完之后呢,最后呢,再写一个消息本身是吧,消息呢,我们之前按照之前的情况也是一样的啊,就是message就等于当前的I。
03:08
再加上。那么咱们接下来把这个message。二进制达到发了。完之前是怎么的,之前只要你发马上就确认,对吧,怎么确认的。发布确认之前就是直接拿着信道点上,点上直接调取等候确认。诶完了呢,如果你等候确认成功了,就打印消息发送成功,但是我们本次打算将所有的消息全都发送完再确认。是吧,所以呢,我们可以怎么办呢?可以呃,循环一直到循环完毕,所以我们可以提前先准备一个,准备一个什么呢?准备一个叫批量。多久是吧,批量。
04:01
确认消息的大小,我们总消息数是1000,我们不一定非得等到1000之后再去确认,可以100条100条确认。对吧,100条100条确认,所以呢,我们可以写一个这呢叫批量。确认的一个长度,例如100条。当然了,你要如果是1000条,那么就是整体,所有1000条整体发布完,诶你就写到这儿就行了,整体发完完,你再统一的去确认一波。但是呢,你这么确认呢,不好在哪儿呢?确实一旦出现了问题,也不知道哪里出了问题,因为你1000条都发送完了,而你确认只确认了一次,那就不知道1000条当中到底是哪一条出了问题。确实存在这么大的一个隐患。对吧,那么即使你隔着100条确认一次也是有问题的,例如你看100条确认一次。那么来吧,那么确认的时候呢,你必须得循环100次的时候,注意循环到100次的时候,马上就确认一次,100条确认一次,1000条得确认十次。
05:08
对吧,确认十次。那么我们怎么办呢?我们再弄一个未确认的一个数据啊,进行比对,因为我这个位置呢,一定要写一个判断。对,判断。判断什么呢?判断呃达到呃100条消息的时候,批量的。确认一次是吧,确认一次,所以呢,这块要有个判断,判断什么呢?判断当前是第几条了,哎,是不是有没有达到100条。有没有达到100条,这都可以啊,那么也可以什么呢?也可以对这个进行取模,对吧,你你可以再单独创建一个参数。或者是对这个它它进行取模操作也是可以,比如说你只要通过I。对它进行取模,如果等等于零,就表示满100条了。
06:02
对吧,因为只有它循环到100,它取模才是零嘛。这样呢,也可以达到,呃,100条确认一次。对,100条确实意思。当然了,你也可以再定义一个变量,例如定义一个叫未确认消息的个数。对,你要是定一个个数完之后,在这里面循环遍历,每便利一次加加一次。那也是可以的,对吧,也是可以。所以你随意了啊,完我们是用它取模等于零,完之后呢,确认一次。这就相当于间隔100条儿数据会确认一次。大约会确认多少次,十次?当然了,这1000条当中1000应该确认不到。1000条,它应该是零开始的零到99,这算一个是吧,1000不算吧。因为如果1000不算的情况下呢,它应该是呃,零算一条。
07:02
总共是1000条。对吧,1000条,所以呢,确认大约不到十次,应该确认九次差不多。没有关系啊,这都不重点,重点就是我们批量确认试一下看看行不行。来我们运行一下啊。运行一下,怎么运行呢?还是老办法,用这个上方的main函数运行完了,为了不要影响到速度,你一定要把上面单个确认的给它注释掉,用它进行批量的确认。点上。批量。完了呢,我们调取一下,看看用时是多久啊。来了,时间来了,发布了1000条单独确认,当然了,这个打印的信息是不对的啊,我们是粘过来的,应该不叫单独,应该是。发布了1000条,完了呢,批量。对,批量确认消息耗时是多久的,我们再运行一下啊。
08:11
好了,来这个时间差不多啊,时间是一样的啊,完了我们把这粘过来吧,放这。发布了1000条批量确认消息,耗时147毫秒,比上面的722毫秒足足的节省了大约呃五六百毫秒,所以比上面性能要高很多。但是弊端特别明显。就是。无法确定是哪个消息没有被确认。
我来说两句