00:00
同学们,我们上节课呢,已经讲完了,简单队列模式。本节课呢,准备讲叫worker quiz准备讲工作队列模式。工作队列模式呢?是什么意思呢?你看工作队列模式又称任务吧,又称任务队列,主要的思想是避免立即执行资源密集型任务。而不得不等待其他完成。相反,我们安排任务在之后执行,我们把任务封装为消息,并将其发送到队列,在后台运行工作进程。将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。这段话呢,读完之后呢,并不是很清晰,所以呢,我们打开一张流程图。
01:01
给同学们画一下图。那么我们画一下啊,首先。他说的意思就是生产者。发消息。会遇到什么情况呢?会遇到大量发消息,所以这个位置。改成大量发消息,消息非常的多。发给谁呢?发给我们的。队列。这个队列的名字呢,依然叫hello啊。完了之后呢,大量的消息发给队列之后,此时造成很多消息停留在队列当中,无法进行及时的去处理。那么处理消息都由谁处理呢?就由上节课我们说的由。有我们的消费者。消费者,那么他此时此刻把消费者的名字给改了,名字改成叫什么呢?叫。
02:05
工作。叫工作线程。你看他说多个工作线程,那也就意味着此时此刻消费者改了另外一个名字叫工作。县城。改名字没有问题啊,这都是一个意思,都是其实都是接收消息或者叫处理消息。接收消息都是一个意思。那么此时此刻。他想说的是,工作线程如果仅仅是一个线程,无法处理大量的消息,因为消息太多了。一个一个的去接收,一个一个的去处理,太慢了。所以他希望。有多个工作线程同时去处理,所以这就意味着工作线程不止一个。对,会有很多个,例如这块咱们再拉出一根线,这就表示是两个线,两个工作线程都是接收消息并处理。
03:07
以此类推,它还会有第三个。以至于还有第四个,第五个,我们就不挨个去画了,就表示会有很多很多个线程去处理这个大量的消息。就造成工作线程之间一起是吧,很多个线程同时处理这个队列中的消息。从而达到将大量的消消息处理完成的目的。那么这里呢,必须遵循一个原则,就是生产者发的这个消息只能被处理一次,不能被处理三次,一旦被处理三次,就会造成工作的内容的重复,所以呢,这里面写一下子注意事项。注意事项。就是一个消息,只能被处理。
04:01
被处理一次,对,不可以处理多次。一旦处理了多次,就会造成消息被重复消费了,这个不是我们的目的啊,这样的话会有很多重复性的工作去做。而我们要求消息只能处理一次,那么这就要求什么呢?工作线程一旦。第一个工作线程接收到消息,他接收到的消息在第二个工作线程里就不能接收了,所以我们的rabbit MQ的工作模式或者叫任务队列是吧?工作队列或者叫任务队列,它就有一个特点,叫分发消息。什么叫轮训呢?轮训的意思就是?你处理一个完,下一个就该轮到我了,再下一个轮到他。完再下一个又轮到我了,完再下一轮到他,以此类推,三个工作线程是,你一个我一个,他一个,你一个我一个,他一个。
05:04
从而达到一个消息只能被处理一次,不可以处理多次,他们三者之间呢?是什么关系呢?竞争的关系。来,我们再标记一下啊,他们三者的关系。三者。关系是。竞争。的关系。啊,必须是竞争的关系,就是一旦他抢到了这个消息,那么另外两个就不可能再抢到这个消息了,因为一个消息只能处理一次,不可以处理多次,所以呢,为了说为了公平的分发,所以是轮询的,哎,你一个我一个他一个,所以三者之间是竞争的关系。好,我们已经把咱们的工作队列或者叫任务队列,以主主要的思想已经给他讲完了。接下来呢,我们打算用代码去实现一下。
我来说两句