简介
- Laravel中Event+Queue组合在一起是一个非常常用的手段,这样可以让解耦的事件异步执行,我们都知道通过
artisan queue:work --tries=1
可以启动一个队列监听的进程但是如果服务器发生重启(这种重启也有可能是批处理定期的)那么就需要自动启动这个进程。 - 下文介绍一种官方推荐的方式,通过Supervisor 完成
- 也可参考learnku上的文档:https://learnku.com/docs/laravel/5.5/queues/1324#supervisor-configuration
安装 Supervisor
- 我用的是php-docker ,安装命令如下:
apt-get update
apt-get -f install
apt-get install supervisor
配置 Supervisor
- 安装好后配置 laravel-worker.conf 文件:
vim /etc/supervisor/conf.d/laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/jk-wxopen/wxopen2/artisan queue:work --tries=1
autostart=true
autorestart=true
user=root
numprocs=8
redirect_stderr=true
stdout_logfile=/var/log/supervisor/worker.log
启动 Supervisor
我直接通过:/etc/init.d/supervisor start
或者,按照官方推荐的方式:
// 必须要通过 -c 指定配置文件的位置,否则 reread 会报错。
supervisord -c /etc/supervisor/supervisord.conf
supervisorctl reread
supervisorctl update
supervisorctl start laravel-worker:*
测试
- 这个就不多说了,自己试试队列任务是否有被消费就可以了,我的是没有问题的。
自动启动 Supervisor 服务
- 默认安装好 Supervisor 后,该服务就已经注入到 init.d 目录下面,并且设置好自动重启,另外如果你是一个完整的服务器,那么你也有千万种方法让其自动重启。
- 但是如果你是docker 的服务器,那么可能会遭遇问题,可以参考我另外一篇文章中的解决方案:https://www.jianshu.com/p/2fedfbc4425b
结束
- 感谢阅读