我在项目中使用Beanstalkd作为工作队列。
现在,我的项目完成了,我必须将其部署在VPS(生产服务器)上。
有些事情让我感到困惑! 我应该通过ssh连接到生产服务器并手动键入php artisan queue:listen
吗?(这是废话)
是否有任何服务器可以queue:listen
作为服务运行?
你应该使用类似 Supervisor 的东西来运行生产中的队列。这将允许您在后台运行进程,指定要处理排队作业的工作器数,并在进程失败时重新启动队列。
至于您选择使用的队列,这取决于您。过去,我使用过本地安装在实例和 Amazon SQS 上的 Beanstalkd。本地实例非常适合基本的电子邮件发送和其他异步任务,SQS 非常适合消息量庞大且需要扩展的情况。还有其他SaaS产品,如IronMQ,但人们在生产中遇到问题的常见原因是因为他们没有使用Supervisor。
您可以使用apt-get
安装主管。以下配置是一个很好的起点:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
numprocs=8
stdout_logfile=/home/user/app.com/worker.log
这将执行以下操作:
- 为队列工作线程指定唯一名称
- 运行
php artisan queue:work
命令
在系统重新启动时自动启动队列工作程序,并在队列工作程序 - 失败时自动重新启动队列工作程序
- 跨八个进程运行队列工作线程(可以根据需要增加或减少)
- 记录任何输出以
/home/user/app.com/worker.log
要启动 Supervisor,您需要运行以下命令(在重新读取配置/重新启动后):
sudo supervisorctl start laravel-worker:*
该文档为您提供了一些有关使用 Supervisor 运行 Laravel 队列进程的更深入的信息。