Laravel + Beanstalkd:如何将 运行 "queue:listen" 作为服务

Laravel + Beanstalkd: How to run "queue:listen" as a service

我在我的项目中使用 Beanstalkd 作为工作队列。

现在,我的项目已经完成,我必须将它部署到 VPS(生产服务器)上。

有件事让我很困惑!我应该 ssh 到生产服务器并手动输入 php artisan queue:listen 吗? (这是废话)

有没有服务器可以运行queue:listen作为服务?

您应该在生产中使用 Supervisor 到 运行 队列。这将允许您 运行 在后台处理进程,指定要处理排队作业的工作人员数量,并在进程失败时重新启动队列。

至于您选择使用的队列,由您决定。过去,我使用过本地安装在实例和 Amazon SQS 上的 Beanstalkd。本地实例适用于基本的电子邮件发送和其他异步任务,而 SQS 则适用于消息量巨大且需要扩展的情况。还有其他 SaaS 产品,例如 IronMQ,但人们 运行 在生产中遇到问题的通常原因是他们没有使用 Supervisor。

您可以使用 apt-get 安装 Supervisor。以下配置是一个很好的起点:

[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 命令
  • 在系统重启时自动启动队列工作者,并在队列工作者失败时自动重启队列工作者
  • 运行跨8个进程的queue worker(可根据需要增减)
  • 将任何输出记录到 /home/user/app.com/worker.log

要启动 Supervisor,您需要 运行 以下内容(在重新阅读 configuration/restarting 之后):

sudo supervisorctl start laravel-worker:*

documentation 为您提供了一些有关将 Supervisor 用于 运行 Laravel 队列进程的更深入的信息。