在真正开始看文档学习queue之前,对于队列的印象是这是一个比较难的东西,一时半会儿学不会,是高级程序员处理的东西。
然而在真正接触了之后,却发现并没有想象中那么难以攀登。花了两个小时看英文文档(慢的一匹),然后就可以按部就班的实现一个小的队列任务了。
实现过程如下:
1.数据库建表
php artisan queue:table //队列任务表
php artisan queue:failed-table //任务执行失败表
php artisan migrate
2.创建job类
php artisan make:job ProcessPodcast
3.在job类中,实现逻辑
job主要包括三个函数
- 构造函数 可选,用来传参
- handle() 必选,实现队列任务逻辑
- failed() 可选,当任务失败时执行
4.分发队列任务
ProcessPodcast::dispatch($podcast);
对于队列中很常用的一个场景,延迟任务,在laravel中只需调用delay()方法
ProcessPodcast::dispatch($podcast)
->delay(now()->addMinutes(10));
5.开启队列进程,执行队列任务
php artisan queue:work
这种方式不能关闭teminal,比较不方便。所以一般使用Supervisor。
以上就可以完成一个简单的队列任务。
在laravel中有一个很关键的点:配置为database驱动。
在/config/queue.php中,需要将connections设置为database。而这一配置是从.env文件中获取的
将queue_driver配置为database。
配置完成后,本地的环境是搭建好了。问题是如果push到线上,则需要注意,更改线上的.env文件,否则就不会生效。
从这个队列job可以看出,事情之所以觉得难,是因为没有动手去做。每一个复杂的体系,总是由一些简单的步骤拼接而成。在学习新的知识的时候,不用担心太复杂啃不下,一点一点肢解学习,学习便不会困难。
入职3个月以来,从对ubuntu操作系统都没用过到现在可以看文档实现小功能,都是一步一步走出来的,虽然进度不快,但是能感到对于网站开发有了很多的认识。现在再去看一个网站,视角也跟从前不一样,会从功能想到模型,想到数据库有哪些字段,想到要提供什么样的api,我觉得这是一个很好的提升。不足的是还需要投入更多精力,才能更加熟练的开发,现在还基本处于沿着别人的路走,踩别人踩过的坑,熟练起来才能走自己的路。同时也觉得看英文文档的重要性,就laravel框架来说,英文原版的一些内容在中文翻译版中直接减掉了,虽然不是一些主要功能,但是对于开发流畅性还是有一定影响的。再就是原版英文文档的描述更清晰一些,尤其是某些定义、参数的设置,在中文翻译中可能就被省略掉了,这会在开发中埋下雷,早晚会踩。善用google,提升学习效率!