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

时间:2017-03-20 15:19:09

标签: php laravel beanstalkd

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

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

有些让我困惑的事情!我应该ssh到生产服务器并手动输入php artisan queue:listen? (它的废话)

是否有任何服务器作为服务运行queue:listen

1 个答案:

答案 0 :(得分:8)

您应该使用Supervisor之类的东西在生产中运行队列。这将允许您在后台运行该进程,指定您希望处理排队作业的工作器数,并在进程失败时重新启动队列。

对于您选择使用的队列,这取决于您。在过去,我已经在实例和Amazon SQS上本地安装了Beanstalkd。本地实例适用于基本的电子邮件发送和其他异步任务,SQS非常适用于消息量巨大且需要扩展的情况。还有其他SaaS产品,例如IronMQ,但人们在生产中遇到问题的通常原因是因为他们没有使用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

这将执行以下操作:

  • 为队列工作人员指定一个唯一名称
  • 运行/home/user/app.com/worker.log命令
  • 系统重启时自动启动队列工作程序,并在队列工作失败时自动重启
  • 在八个进程中运行队列工作程序(这可以根据您的需要增加或减少)
  • 将任何输出记录到sudo supervisorctl start laravel-worker:*

要启动Supervisor,您将运行以下命令(重新读取配置/重新启动后):

...
function(req,res){
    User.find(function(err,users){
        res.json(users);
    }) 
}
...

documentation为您提供了有关使用Supervisor运行Laravel队列流程的更深入信息。