00:00
后来学习一下消息队列,也就是队列手册在这里。先看一下简介。那什么是队列呢?就是我们可以将耗时的任务,比如说发送电子邮件啊,这样比较耗时的任务往后拖延。延迟这些耗时的任务可以极大的提升外部响应速度。来看一个简单的例子。找到我们的test control了。这里啊。我们给用户一个响应。想一个哈。这时候我们请求test。可以看到是不是响应过来了,假如我们在响应之前有一系列的比较耗时的任务,比如说发送邮件啊。嗯。这里啊,开始发送邮件。
01:01
但是由于受于这个网络波动的一些影响,这个邮件发送了几秒呢?发送了五秒。他上了三秒吧。由于网络不好。三秒才发送完成,这是很正常的一件事啊,有时候邮件你就说网不好的,真可能就发三秒。哎,接着我们看一看现在的一个效果。当用户去请求我们的服务器的时候,他要一直等,等三秒之后你看才拿到这个响应,是不是这样明显对于用户的体验来讲不是特别好。这时候可能怎么办?我们把这些耗时的任务啊给放入队列中,让他们在这个队列里面排队去进行后台的一个处理就可以了,我们该给用户响应就给用户响应。兄弟们,这是队列的一个主要的一个作用。接着看一看拉为我们提供了啊,有多少种使用队列方式,它提供了统一的一个API可以兼容啊这些。
02:03
甚至于数据库这样的一个使用队列方式,那这些都是做什么的呢?啊,其实我们想我们把队列给往后拖延了,对吧?好,你拖延了一个,然后又拖延了一个,然后拖延了N个,那这这些队列我们总要有一个地方去记录他们对不对,或者是给他们编好号啊,1234,然后按顺序先执行第一个任务,再执行第二个任务,对不对,那肯定得有一个地方来记住,记住这些。我们存放的这些队列是不是,而这些东西就是用来记录队列的,我们可以拿记录,也可以拿数据库记录清楚吗?呃,在开始使用我们队列之前呢,要先理解这个连接和队列啊。队列的配置文件在config里面。看一看这个配置文件。找到这个配置文件。这里就是我们使用的连接啊,它默认使用的是这个啊,这个是没有使用任何其他的一个连接,当然我们可以配置成数据库或者等其他的一些连接,对吧,这个就是连接,就是我们要使用啊什么。
03:07
这个。地方去存储我们的队列的一个内容。这个是。连接啊。不要使用队列,我们还需要执行这个命令去启动啊队列才可以。接着看一下各个驱动程序的一个说明,也就是你要使用其他的,呃,一个连接方式的话,它的这个配置,比如你要使用数据库,我们要创建一个数据库相应的一个表,当然可以直接执行这个命令,它会帮我们创建这个表的迁移,并且当我们运行迁移的时候,会自动帮我们创建一个表啊,比如说你要使用red,需要进行什么样的一个配置,这些配置文件呢?你用到什么自己去看就可以了,这里我们使用啊数据库来作为我们。队列的一个驱动。首先执行这个命令生成。表的一个迁移。复制一下啊。执行这个命令之后呢,他会在这个。
04:00
Database里面。啊,这个里面你先把配置文件给关掉。Migration里面啊,给我们生成一个。就是用于存放这个队列的啊,这个任务的一个表。啊,这样一个迁移的一个文件啊,大概有这么几个字段。好。接着我们去运行迁移。Art。它就会给我们创建对应的一个迁移表。好,看一下我们数据库刷新一下。是不是多了一个牵引这个工作的,就是说队列的一个表,这个是执行失败的队列的一个表啊,这两个。数据表创建完成以后,我们还需要进行配置才能使用到这个数据库的连接驱动。在哪配置呢?看一下它的配置文件,它这里使用的这个啊,驱动是从EV里面取的这个配置对吧。那我们去EA里面找到这个配置去更改一下,把它改成。
05:03
这个database也就是。队列的这个配置文件里面的这个链接名字就可以了,这样就会使用我们的数据库来作为队列的一个驱动。接下来我们看看如何去创建我们的任务类。默认情况下,我们应成立的所有就是可排队的任务被存储在的这个APP jobs如果没有这个目录,当我们创建啊这个队列时候,会给我们生成这个目录。也就是说其实我们处理啊,某一类的一个比较延迟的一个任务的时候,我们都可以去对应的给他创建一个啊这个任务类。来我们创建一个这么一个类。他会在这个。APP目录下给我们生成一个叫目录刷新一下,看看是不是多了,这目录里面有我们这么一类,对吧?啊,可以在这个里面去写我们的逻辑。
06:00
它里面很简单,就一个构造方法和一个焊的方法,其实我们的业务逻辑就是写在这个里面的,对吧。啊类的一个结构啊,通常只包含一个判断方法,就是在队列处理的时候,它会去调用这个方法。接着看啊。在定义好这个啊类之后呢,我们就要使用这个队列,那怎么去分发这个队列呢?可以使用啊这个任务类的。啊,这个派方法去进行分发,我们还可以传入这个参数,传入参数的话呢,构造函数就可以接收到这个参数。可以用这个啊参数去传递给构造函数,接着我们来试一试这个例子,我们在这里干什么?还是去执行我们这个耗时的任务,就是发送邮件啊,我们模拟发送邮件啊,模拟这个发送邮件发送了五秒。好吧。
07:03
呃,同样的啊,我们先在这个test里面去看一下吧,因为这个呃,Sleep的话,我们在这个队列里面不好看,我们看什么呢。我们通过写入日志的方式,用INF可以向我们的日志文件里面去写入日志啊。好,这里我写着开始发送邮件。然后三秒以后我来再写一个音符,也就是。啊,邮件发送成功。发送成功,哎,中间经历了三秒的一个历程,那这个音符会向。我们的啊storage,然后logs这个里面去写入信息,现在是空的,对吧,如果里面有内容,你可以先把它删掉,或者把这个文件删掉,它也会自己去创建这个文件。这里我们把这个文件给删掉啊。接下来把这个时间给改大一点,我们改个十秒。
08:03
下面我们来刷新啊,可以看它一直在等待,但是呢,它已经给我们生成了这个文件,是开始发送文件。好,大概等十秒之后啊,我们看这个内容。浏览器现在已经啊得到响应了,这时候我们看这个内容是不是发送成功。啊,这个就是我们模拟的一个比较耗时的一个过程,比如说。啊,改成五秒吧,太长了。好,那么我们现在把它放入队列,放入刚才我们创建的队列。把这个代码啊,放到队列的这个判断方法里面,是这里去执行的这个啊队列的一个方法,那怎么去使用队列呢,直接使用我们创建的这个任务类。啊,我们创建的这个任务类使用队列。使用啊对列发送。
09:01
直接使用我们创建的这个任务类。使用他的这个dispatch这个方法。在。要使用队列的时候,我们要先去开启这个队列,不然的话我们队列还是使用不了,看一看手册如何去运行我们的队列。找到这里有一个运行队列处理器。我们要执行这个命令,去运行这个。队列的一个处理器。当这个命令一启动,它将会一直保持运行。除非我们手动停止或者我们关闭中断,这个时候这个队列的这个。啊,就会给关闭。来,我们运行一下这个命令,开启我们的队列,它会一直在这里去运行的啊,如果我们手动结束,或者这个终端关闭,我们的这个队列也将会。啊,结束就不再。就是不能再使用去队列了。啊,这是我们后面说的,如何去守护我们的这个进程。先把队列现在是启动着的啊,我们去执行一下。
10:03
先把test的文件给删掉啊,先把这个logo文件给删掉。啊。接下来我们去继续访问,我们在队列,队列里面去啊,睡眠了五秒。接下来看看用户还会不会等待,一刷新是不是立刻得到响应了,不用等待这五秒吧。而且。这个队列还在执行啊,好,现在执行完成。是不是多了一个这个文件。啊,开始发邮件和邮件发送成功。啊,这里也可以看到我们队列执行的一个过程。通过这么一个简单的例子就可以看到,我们把这样一个比较耗时的任务放到了队列中。而用户就是正常的请求可以立刻得到响应,这种耗时的任务,他在这个后台会去啊,慢慢的去执行,现在已经在开始队列,然后他慢慢的去。去执行自己的一个队列。
11:01
这时候执行完成了,对吧。啊,这是队列的一个主要的一个作用。我们将这种耗时的任务放到队列中,那接下来我们再进行一个尝试啊,这次尝试是把我们的这个交表给打开。好把这个表给打开,那打开之后呢,我们去刷新,把我们的这个请求放到队列里面,你去刷新那个表,可以看到这里面是不是有任务,对他就会在处理这个任务。对吧,处理完成之后,这个数据会被删除,那如果有多个队列呢,它就会在这个表里面进行排队,那接下来我们多刷新几次。123刷新三次,回来看一下这个表是吧,它有三个任务再排序啊,当你每执行完一个,它就会去删除一个。这是队列的一个简单的使用,当然在就是运行队列处理器的时候,还可以加上一些参数。啊,比如啊去使用指定的一个队列,不使用的话,我们就会使用默认的一个队列啊,使用指定连接或者使用的一个啊指定的一个队列的一个分组,因为我们队列可能有有多个,比如有处理邮件的,处理短信的,我们可以把这些啊队列进行一个分组。
12:09
如果不分组的话,还是会使用这个默认分组的这个队列。啊,包括执行的这个给定的一个数量。这些我们用的时候在手册里面去看一下就可以了,甚至提提高这个队列的一个优先级都是可以的。嗯。接下来我们来看一个问题,就是说因为我们的队列必须要在这里去一直开启的这个啊,队列的这个监听器,我的队列才能生效,对吧?那假如我们手动关掉了这个东西,或者说我们的终端异常关闭了,对吧?或者我们这个进程它自己关闭了,那么队列就失效了,这样对于我们上线的一个项目来说,影响是比较大的。对吧,所以我们要想一个办法去守护我们的这个进程,不让他去。就是说异常的结束掉,哪怕它异常的结束掉了,我们也要能立马去重启啊。那这里就给我们提供了。这上面啊,提供了这个守护进程啊。
13:03
它是用于一个Linux操作系统的进程监视器,就是如果当我们的这个进程执行失败,会自动重启这个进程。啊,在U盘图上安装是比较简单,只用命令可以了,然后在其他系统上可以去参考各个系统的一个安装的一个方式。啊,关于它的一个配置,它的这个配置文件是在这个ETC啊这个目录下,我们建一个啊什么什么点com的一个文件可以啊,最好是以。com结尾,它好像是包含的是这个点。com结尾的一些配置。接着啊,里面的这个配置比较简单,就是说我们这个啊,就是说守护进程的这么一个进程的一个名字,然后是要执行的一个命令,看这里它执行的其实还是PP artist命令,然后去启动这个队列,对吧,只不过加了一些参数啊,使用了这个指定的连接啊,包括这个其他重试的一些次数啊,甚至这个art它使用的是绝对路径,对吧?我们要使用这种啊绝对路径,因为我们在当前目录下使用PPR可以找到我们当前目录下的这个art,对吧。
14:01
你看是不是,那如果你是让这个进程去执行这个命令的话,他要从这个根目录去找才能找到这个命令可以吧。啊,接下来的一个配置是,比如说自动开始啊,包括这个开启的一个进程数。啊,包括就是说呃,日志的一个输出的一个位置啊,其实我们要改的就是一个进程的名字,还有我们的命令的这个一个目录,还有我们的日志这个目录,包括这个进程数我们限制一下,要不然啊会把我们的这个CPU把进程给占满。接下来为我们的队列去配置这个守护进程,因为我们使用的是home state,所以它会把这些常用的这些软件都给我们装好,所以我们可以直接使用它啊,可以使用它的一个命令去看一看。啊,有现在是正在守护的一些进程有哪些。Ctl,对,可以看到。打错了啊。可以看到是空的啊,没有这个正在守的一个进程,接下来我们在这个目录。
15:03
啊,去在这个目录去创建一个这么一个配置文件好。Vim啊,填CDCD是切换目录的,我们先CD到这个目录。接着啊,Vim要速度啊,他这个要需要管理员权限。编辑一下这个文件,因为这个文件不存在,我们编辑之后保存的时候,它会自动给我们创建文件啊,然后写入什么内容呢?把这个放大一点啊。写入这个复制的这个内容,这个内容啊。啊。你如果不会使用这个vim编辑器,我们就不使用vim编辑好吧?你感觉这个另一个上的编辑器编辑比较麻烦的话。可以去啊桌面。新建一个TT,我们在这个里面去编辑好内容之后。啊,再去。就是复制到那里面,但是不推荐你使用记事本去编辑啊,不临时编辑没有事,但是不推荐你用记事本去改一些配置文件,因为它会加一些这个报幕头,我们只是在这里面啊,去编辑我们这个文件没有事。
16:12
然后把该改的配置改一改,比如说啊这个名字我们用默认就可以。啊,这个进程可以,主要是这个目录,这个目录是我们这个项目所在的目录,我们使用PW点看看我们项目啊,不是先回到我们的项目目录啊,加目录CD到。啊,Code的blog啊,这个是我们项目所在的一个目录,对吧,所以我们要把目录改成这个。这个下面的artisan。斜杠啊,我们这个项目下的这个阿。兄弟们,同样的这个日志文件也让他输出到我们项目下面的。啊,这个。使用输入到我们的这个日志目录吧。这里啊,我们copy它的这个路径。
17:03
算了,直接就付这个这个吧。好。下面的logs下面啊。把日志文件改到这里,其他的这个进程数呢,我们改两个吧,就运行两个这个进程数去监听我们的这个队列。好改完这个配置之后呢,复制。去写到这个文件里面。哎,这时候啊,你使用。什么编辑器呢?先进入到我们这个目录吧,先进到啊这个目录,你先CD到这个目录。CD啊,这个目录之后,在这里面你可以使用VM也可以使用这个拉啊都可以。啊,使用nano吧,Nano,然后跟上这个文件名。接着回车就会进入到我们这个编辑界面,把我们的内容粘进去就可以了啊。
18:00
这样就不用你在Linux里面的这个编辑里面去编辑了,粘贴完成之后,你看这个CTRL加X是结束,然后它会问你是否是是否去保存,你就确定要保存,他问你保存的文件名是这个吗?就回撤就可以了,没有默认这个文件名啊。输入Y回车啊。他说是没有权限啊,没有权限,那接着呃,先退出先不保存,要加上速度才能有权限去编辑这个。啊,这个位置的这个文件啊。嗯,先保存先退出一下,我好像有编辑错了。速度大脑。复制一下这个文件名。然后粘贴过来啊,要加上速度给管理员权限才可以,接下来就可以粘贴我们的内容了,粘贴过来。没有复制上啊。然后是CTRL加X。输入外确定写入回车写入,这样就RS看一下是不是就多了这么一个配置文件好。
19:04
那怎么样去啊,启动我们的队列呢?就是启动我们的守护进程,现在只是我们把配软件写好了,你需要启动守护进程。才可以。来查看一下守护进程的现在的一个状态,可以看到还是没有的,对吧,那怎么启动守护进程。啊,这三个命令都可以啊,我们使用这个。他说,呃。这个配置文件。啊,有问题啊。用户名啊,不对,我们还要改一下这个文件的用户名重新来。这个用户名我们要改成我们这个维格ta才可以啊,这个我们给忘掉了格ta。这个命令也有问题啊,我们不能指定啊,使用的这个连接,我们没有这个链接,我们使用的是默认的数据库连接是吧?把这些都删掉啊,就直接执行这个啊,队列去启动就可以了。
20:08
啊,这样就可以了,我们再复制一下这个文件。然后。啊。把屏幕清一下啊,回到这个配置文件啊。就是ETC下面。这个里面的康复点滴。去到这里面,把我们之前的这个配件给删掉,重新写一个来。这个需要管理员权限速度M。之后速度拉到重新写一个这个拉干work。粘贴上我们的这个内容。X。然后输入Y,确定改变回车。好,这样我们就重新写了一份这个配置,这个配置呢,我们可以cat检查一下,看对不对cat。
21:00
哎,可以检查一下这个配置啊,应该是没有什么问题的,用户名也对了,这个命令也对。包括我们的这个进程数是两个。啊,日志文件的这个目录也对,好接下来。就可以去。再次启动啊,我们的。手工进程速度一定要加上管理员的权限。使用它的update更新。这个时候啊,它就会把它给加到这个进程组里面,这时候我们看一下啊,我们守护进程的一个状态。可以看到啊,啊这两个进程对不对。是吧,这个它就会监听着我们的这个队列的这个命令,如果他异常的终止,它就会帮我们去重启。好,接下来我们进行尝试啊,去再次去试一下这个延迟的一个问题,把日志文件里面相关的目录啊,相关的日志文件,包括那个拉logo已经删了。
22:02
我们再看一下。啊,这个队列。是不是正常执行?导致test刷新,好立刻给我们返回了,然后呢。就是这个队列,它在后台的执行,等一会儿它就会执行完成。可以看到啊,我们已经生成这个文件,我们队列是。正常运行可以再去尝试一下啊,再去刷新一下。看会不会再次写入。大概需要等等一会儿啊,看队列里面已经有队列在。再执行了啊,等他执行完它会没有,这里面会多少个内容对吧,这样我们啊,通过守护进程把我们的队列放在了后台运行,当我们的队列异常结束的时候,也会帮我们重启,这样才是比较。啊,安全和稳定的一个策略。嗯,队列的话,其实学到这里就可以我们去正式的去使用了,像这些。
23:01
会用到的其他的一个地方,我们再来看手册就可以了。嗯,其他的可能会用到的,比如说这个。呃,延迟的一个分发,就是我们希望啊,在这个队列啊,不是说立马让它执行,过一会儿才执行,可以设置它这个延迟的一个时间,包括这个啊,甚至响应到浏览器以后才开始使用这个队列。甚至是啊,我们队列它是异步的嘛,有时候我们需要队列里面的数据,也可以使用这个方式进行同步的一个调度啊,都是可以的。关于队列啊,这个消息,队列的内容就先讲到这里。
我来说两句