如何在Laravel中设置Redis队列

wljmcqd8  于 7个月前  发布在  Redis
关注(0)|答案(1)|浏览(77)

Laravel documentation最大的缺点之一是缺乏有关配置基础设施的信息,这对于使用Redis设置队列尤其如此,Redis以其性能和高可用性而闻名,但也很难正确配置,特别是当错误配置的后果可能严重影响Web应用程序时。
如何设置Redis来处理我的Laravel队列?

plicqrtu

plicqrtu1#

开始,你应该首先确保你有both the components,你需要运行Redis。然而,正如我在生产服务器上学到的那样,即使phpredis扩展和Redis服务器都在工作,你的队列仍然不会运行--尽管你需要在documentation中向下滚动很长一段时间才能第一次提到一个worker,你需要一个开始处理队列中的任何作业。
可以通过运行以下命令来启动队列worker:

$ php artisan queue:work &

字符串
但是,在生产环境中不建议这样做,因为工作进程无法重新启动,每次发现队列不工作时,都需要您通过SSH连接到服务器并手动重新启动。
相反,您可以设置supervisor-最常用的Linux进程监视器-以确保队列工作器在重新引导后总是自动重启。这也将允许您随时运行php artisan queue:restart命令,并确信队列工作器将正常关闭并重新启动。
在Ubuntu上安装supervisor:

$ sudo apt-get install supervisor


为您的队列worker创建配置文件:

$ cd /etc/supervisor/conf.d &&
$ sudo nano myapp-worker.conf // replace myapp-worker with the desired name of your worker file


在您刚刚打开的空白文件中,将以下所有内容粘贴到其中:

[program:myapp-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/site/root/artisan queue:work redis --tries=50 --backoff=3 --timeout=20
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=hashim
numprocs=1
redirect_stderr=true
stdout_logfile=/storage/logs/queue-worker.log
stopwaitsecs=180

  • myapp-worker替换为文件名
  • 确保将maxtimestopwaitsecs设置为高于运行时间最长的作业的值
  • user替换为要运行命令的用户名
  • 确保numprocs与服务器的CPU核心数大致相同

完成上述更改后,按Ctrl+O和Enter键保存文件。
运行以下命令,告诉Supervisor重新读取配置并启动创建的工作进程:

$ sudo supervisorctl reread
$ sudo supervisorctl update
$ sudo supervisorctl start my-worker:* // replace with the name of your worker


最后,要验证您的队列worker是否正在运行,请运行:

$ ps -aux | grep queue:work


您的队列worker现在将处理任何传入的作业。

相关问题