“队列”第二回——曲苑杂坛

2017-5-13   /   字数:847   /   阅读数:19729   /   分类: Laravel     

三种监听方式

以下内容只适用于 Laravel 5.2 及以前,5.2 及之后的版本请直接使用 php artisan queue:work

1. php artisan queue:work

只执行一次,只等待三秒,也就是说,如果有任务,执行一个后退出,如果没任务,三秒之后也退出

2. php artisan queue:listen

不退出,持续监听队列请求,每有一个新任务,就初始化框架,处理任务

3. php artisan queue:work --daemon

不退出,持续监听队列请求,只是不像 listen 一样每次都重新初始化整个框架,而是复用内存里已有的处理进程,性能更高。

缺点是修改了处理队列的代码后,需要手动重启这个进程以重新初始化框架。

Supervisor

我使用的线上配置文件如下:

/etc/supervisord.d/laravel-queue.conf

[program:laravel-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/xxx/artisan queue:work --daemon --tries=20
autostart=true
autorestart=true
user=apache
numprocs=1 // 监听的进程数量,用于并发处理任务
redirect_stderr=true
stdout_logfile=/var/www/xxx/storage/logs/queue.log

监听的进程增加几个可以大幅提升任务处理效率,但是会增加无任务时的负载,请根据负载情况进行调整。

启动 Supervisor

supervisord -c /etc/supervisord.conf

接下来他就会自动开始处理队列啦。

WRITTEN BY

avatar
标签: 队列

评论:

yi'ran'zai
2018-09-30 17:59
有个坑,说明一下,Laravel中的队列任务有修改,一定要重启supervisor服务才能生效
xiaobo
2017-07-19 16:34
你好久没有更新啦。。。

发表评论:

© 2011-2024 岁寒  |  Powered by Emlog