00:00
同学们,我们上节课呢,已经呃发送了,写了一个叫生产者的代码,接下来呢,我们写一个消费者的代码。发送的是一个延迟消息是吧?啊是一个延迟消息啊,所以呢,我们写一下消费者的代码,消费者呢就走他。对,这是一个死性的是吧,那我们单独。再来一个延迟的名字叫。呃,叫。对。延迟困。不对是吧。延迟队列困。完了呢,叫consumer,对这么一个名字。好,这个我们藏起来啊,这块呢是写上叫做消费者。消费者专门消费的。是基于。插件的延迟。消息对。完了呢,这块呢,写上我们的一个注释。实例化是吧,完了紧接着在监听我们的这个消息啊,就是诶。
01:04
监听消息。我写一个rabbit监听类,再写上你的队列,这个队列的名字呢,在这里面呢,我们刚才定义的时候,定义在这里面了,这是不队列吗?通过这个类名你也是可以点上。点上。等会儿点不出来啊,点出来我们拿过来。点上队列名称。完成了public,完成了avoid,完成接收消息是吧,来一个叫。C窝对与C是吧,完之后呢,紧接第一来延迟。Quit,消息是吧,完再接收一个消息。导包要小心,咱们曾经已经导过一次错误的包了,这次一定要导对,是amqp包当中的。完之后拿到消息。怎么拿到呢?首先第一步你得拿到一个MSG消息,用new字符串类型里面message.get。
02:06
消息体拿到消息完之后呢,进行日志的打印,诶log in日志。我们这个日志呢,没有去加注解啊,加注解就有了SLF否解。完log in four。完了呢,写上。还是时间,当前时间冒号占位符。逗号收到延迟队列的消息是多少冒号占位?完之后面写时间。New data。脸上突,等会儿啊,倒包倒下包。字符串完了,再把消息MSG放里面就可以打印了。这样呢,我们接收到消息了啊。我们来试一下这个消息呢,到底行不行,对吧,所以我们一起来测一下。
03:02
我在测之前呢,先把这关了,我们再重新启一下这个服务是吧。怎么测呢?咱们文档上也给同学们提供好了,怎么测了,你看。发起。请求发几个呢?发两个还像原来一样,哎,一个发送的是BABY1,哎,BABY2是吧,Baby baby婴儿是吧。完了呢,来BABY1BABY比二,那么一个是发2万,2万注意啊,毫秒值啊,所以是多少20秒,一个是发2000,相当于两秒。那么也就意味着为什么这么测呢?是因为之前基于死心的那个延迟消息是不是有问题,对,是有问题的。就是当时基于死信的那个延迟消息,它有什么问题呢?他的问题就是他只会检测第一条消息,发现是20秒,他不会检测第二条消息,导致第二条消息原本两秒钟就应该发过来,但是呢,非要等到第一条消息20秒之后发完了,才会轮到第二条发送。
04:09
这种这种情况是不是不合理啊,对不合理,为什么呢?因为我连续发两条信息,即使你是先发的,我是后发的,因为我的时间短,我就应该怎么呢,先出来,先进入队列被消费。而你应该背后消费,这样才能达到我们一个延迟消息的目的。那本次咱测一测看行不行,文档上说你看这要注意啊,文档上说行。文档上说你先发的是BABY1,又发BABY2,但是消费的时候先消费的是BABY2,再消费BABY1,那就意味着基于插件的是没有问题的。对吧,说这个第二个消息确实是先被消费掉了,符合预期。
05:00
那我们并不相信是吧?我们其实不相信,我们试一试呗。来了啊,先发。呃,这个不要了,完了我把这个东西都去掉是吧,哎,之前就这么发的。我发一下啊,没没粘到啊,再重新粘一下。复制。啊,可能把它先关了吧,粘一下走,发完一个啊完紧接再去走第二个。走好,走完了,咱们看看控制台。来了。从现在目前来看的话,确实已经达到预期了,因为同学们可以看到第一条是20秒,2万毫秒,第二第第二个是2000毫秒,完了呢,BABY2呢,相当于两秒就要接收到,那么接收到了吗?接收到了你看二时间是多久,你看21。跟他发的是多少,他是19发的,21街道几秒两秒。那么上一条消息BABY1是13秒发的,33秒接到间隔是不是20秒,是20秒。
06:07
可以吗?可以哎,经过测试发现基于插件的研制消息。非常符合我们的预期,达到了我们心目中的这么一个目标。好吧,哎,我们所以我们在企业上班,应该如果要进行延迟消息的发送的话。最好选择基于插件。
我来说两句