Laravel - 队列学习一

使用场景:处理一些耗时或者高并发的操作,把操作放到队列中异步执行,可以有效缓解系统压力、提高系 统响应速度和负载能力。常见的场景有群发邮件或秒杀等等。Laravel支持多种队列实现的驱动,本文主要以Redis进行说明。

一、安装Redis驱动

修改composer.json文件,如下:

"require": {

         "php":">=5.6.4",

         "laravel/framework":"5.4.*",

         "laravel/tinker":"~1.0",

         "predis/predis":"1.0.*",

         "dingo/api":"1.0.*@dev",

},

执行composer update即可完成安装

二、配置Redis的连接

修改.env文件,如下:

REDIS_HOST=127.0.0.1

REDIS_PASSWORD=1234qwer

REDIS_PORT=6379

三、修改默认的队列驱动

修改.env文件,如下:

QUEUE_DRIVER=redis

四、编写任务类

php artisan make:job QueueDemo

五、其他

最大失败次数设置,在任务类增加属性:

public  $tries=5;

超时设置,在任务类增加属性【队列任务最大运行时长(秒)】:

public  $timeout=120;

timeout 与 retry_after的区别查看地址

六、分发任务

分发任务到指定的 连接与队列

dispatch(new DemoQueue('李四'))->onConnection('redis')->onQueue('exam');

分发任务到指定的队列

dispatch(new DemoQueue('李四'))->onQueue('exam');

七、运行队列监听器

指定 连接&队列

php artisan queue:work redis --queue=exam

注意:队列进程开始运行后,会持续监听队列,直至你手动停止或关闭终端;为了保持队列进程queue:work持续在后台运行,需要使用进程守护程序,比如Supervisor来确保队列进程持续运行。队列进程是长生命周期的进程,会在启动后驻留内存。若应用有任何改动将不会影响到已经启动的进程。所以请在发布程序后,重启队列进程。

八、其他

进行休眠时间

当任务在队列中有效时,进程会持续处理任务,没有延迟。不过,我们可以使用sleep配置项来指定没有新的有效任务产生时的休眠时间:

php artisan queue:work –sleep=3

你可能感兴趣的:(Laravel - 队列学习一)