00:00
同学们,我们来说一下子。呃,基于插件的按延迟消息啊。我们上节课呢,已经提到了一个关于延迟队列的一个小问题,那这个问题呢,确实是一个问题。因为之前的延迟队列呢,是基于死信的,那么基于死信存在一个什么问题呢?存在一个,呃,它只检测真的,他只检,只会检查第一个消息是否过期,他不会管第二个消息,所以导致第二个消息实际上已经呃,延迟时间已经到了,完了呢,并没有被发送出来。一直等到第一个消息延迟时间结束了,第二个消息才会被执行。所以呢,第二条息不并不会优先执行,这就是一个问题。那么这个问题呢,我们怎么办呢?只能是基于一个叫插件对rabbit的一个延迟插件来解决,那么这个插件呢,是在这个官网上这个位置下载的。那这个位置呢,我们就不去下了,因为我们提前已经下好了,下载的速度并不快,所以呢,我们已经提前下载咱们的电脑上,你看在这个位置。
01:09
我已经把这个插件下载下来了,下载的是一个3.8.0插件。目前最高版本应该是3.8.0,后期可能会出现3.8.5吧,那么就不管了,我们把这个插件诶安装一下。安装的步骤呢,是这么的,首先你安装插件一定要进入人家是吧,谁谁呀,Rub q的一个什么一个插件的一个文件夹下啊,就是这个文件夹。那么也就意味着首先你得把插件放到这个,哎,发放到这个插件的文件夹中。而这个文件夹名字过长啊,所以我们可以复制一下。首先第一件事,CP对,你得把这个插件拷贝一下。拷贝啊,拷贝到哪儿呢?指定的这个路径下,你拷进去。
02:00
考完之后呢,你再通过CD的方式进到这个路径下。完了,你可以在这里面看一眼这个插件有没有拷进来。当然了,这个插件名字叫延迟消息插件,3.8.0。这个插件不会随着它这个rabbit MQ更新而更新啊,因为MQ已经3.8.8了是吧,3.8.8了,那么它的插件还是3.8.0的,那是因为这个插件不用实时更新,因为只要解决了这个延迟队列的问题就可以是吧,就可以。好,接下来开始安装,安装呢肯定是用到了我们这个命令,之前咱们曾经也用过这个命令是吧,叫rabbit插件。安装,哎,这个延迟插件。安装延迟插件呢,没有必要去写后面的版本号,所以只要你把这段复制过来就可以,相比于后面呢,缺少了一个杠三点八点零点ez,哎,这个都这部分就不用写,直接就可以安装。
03:03
诶,安装有点慢啊,但是也也挺快啊,大约几秒钟,这不也安装好了嘛,是吧,你看正在添加插件进入到配置当中,完了呢,这个插件已经被安装好了,你安装了一个插件,所以到此咱们的插件就装好了,但是装好你一定要记住。装好插件并不能马上要用到,怎么办?你必须要重启,你看重启我们的rabbit MQ。那么我们重启一下吧,那么Robin MQ呢,应该是这个服务啊,它的名字应该叫这个名字是吧,我们也是猜测的,所以呢,System重启这个叫restart重启这个服务。这个服务呢,没有发现啊,就证明这个不叫这个服务是吧,那到底叫什么名呢?我们看一眼。这个服务的名字应该在前方,我们安装的时候曾经都起过,安装往上滚动一下啊。
04:00
安装。啊,这么长这呢啊安装安装当中呢,我们的服务的名字叫啊中华线不是下滑线是吧,所以呢,我们改一下改成中华线。启动。稍微等一下啊,因为启动呢,需要大约几秒钟吧。十秒钟,有的时候也是有的。好,起好了,当光标进行闪烁时,就证明已经起好了,这个时候呢,我们去访问一下我们的这个后台界面是吧?刷新。接下来之后呢,你到哪儿呢?到这个交换机这里。对,随便新增加一个交换机,这个时候你在这个位置类型当中点下拉框,注意看。如果你真的把插件安装好了,那么这个位置会比原来。多一个叫叉延迟消息这么一个类型,类型比原来多了一个。
05:00
而这个类型。就是延迟插件所带来的新类型。而这个类型在哪呢?在交换机新建一个交换机的类型。那么这就意味着这个插件它延迟消息的位置不再是。队列了。而是由交换机来延迟。那么什么叫延延交换机的延迟呢?我们这里呢,得稍微去画一张图了。画一张小图。那么我们的延迟插件只要装完之后,你会发现是这么个情况。生产者。发消息。给哪儿呢?给交换机。我们交交换机啊,我们之前存放消息是放在队列中,也就意味着放在这儿。队列当中有个TTL的一个概念。对,存活时间一旦它过期了,哎,往下走就是另外一个叫死信交换机。
06:03
那么死信交换机再往下走,就是我们的死性的队列是吧,哎,死。死信队列完死信队列之后再连接一个,这个就是我们的啊消费者。就它所以之前是这套流程,那么真正延迟的位置注意。是在队列,在队列这个位置曾经是基于死信的,对基于。死心的情况下。对,基于死信的。情况下是在队列这个位置停留,但是咱现在是基于。插件基于插件是在哪呢?是在交换机这啊。比如说基于。插件的。是在交换机这个位置,有什么概念呢?有这么一个,哎,叫。
07:00
延迟,所以在这个位置延迟盖。所以导致一旦装完插件了,消息延迟的位置就换位置了,就换哪了,换到交换机了,相当于生产者发消息,这个消息停留在交换机这个位置,停留多久呢?你比如停留十秒。完了,到了十秒之后,哎,将消息发给队列。那么注意啊,一旦基于插件呢,原理图就不是这样的。那应该是什么样的呢?应该是这样啊,继续插件啊挪过来。就不会这么复杂了。啊,生产者依然是曾经的生产者是吧,生产者。那么发消息到哪儿呢?到交换机。交换机。负责进行延迟。完延迟完之后呢,紧接着再往下走一个正常的队列就可以了,这个队列不需要延迟了,完之后再走一个,呃,消费者。啊,也就结束了。所以呢,基于插件的要比上面基于死信的要简单,简单到哪里呢?因为只需要有一个交换机,一个队列就可以。
08:08
完了呢,它会在交换机这个位置延迟多久,例如延迟十秒啊,例如延迟40秒啊,例如延迟一个小时啊啊都是可能的,所以真正延迟的位置是交换机延迟。一旦他研制完了,会把消息。诶,路由给队列,队列呢,再把消息传递给消费者,也就完成了本次啊本次的延迟消息的发送。这就是基于插件。
我来说两句