Laravel控制队列服务自动执行的方案

简介

  • 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

结束

  • 感谢阅读

推荐阅读更多精彩内容