我正在使用Laravel Queues而我正在使用IronMQ。但我对这个过程有点困惑。
我已在queue.php as 'default' => 'iron'
中设置了默认连接,并在同一文件中设置了铁设置。
现在我用
$this->dispatch(new createEvents($data, $user));
虽然createEvents
类是Laravel教程中解释的创建的作业类。现在执行以下代码时
$this->dispatch(new createEvents($data, $user));
它在项目下的ironmQ帐户中成功创建了一个队列。
现在我的困惑开始了。我已将一些任务排队到该队列但现在我将如何运行该队列?我如何运行排队的任务?我是否需要为它创建一些额外的代码,或者我是否需要为它做一些设置。请指导
答案 0 :(得分:3)
您无需亲自前往服务器并运行此命令,您需要拥有可继续运行的流程,并执行这些工作。
我会推荐“supervisord” http://supervisord.org/
这个程序用于启动一个脚本并使其保持运行,即使它失败了,它也会重新启动它(直到发生一定数量的失败)
安装后,您应该创建此超级用户任务文件:
[program:queue]
command=php artisan queue:listen --tries=3 --env=your_environment
directory=/path/to/laravel
stdout_logfile=/path/to/laravel/app/storage/logs/supervisord.log
redirect_stderr=true
autostart=true
autorestart=true
答案 1 :(得分:1)
你可以php artisan queue:listen
它将启动所有列出的队列
或者如果您指定队列名称php artisan queue:listen queue_name
不要忘记运行php artisan queue:failed-table
。这将在您的数据库中生成failed_jobs
表。
因此,如果队列运行时出现任何问题,它会将失败的队列保存到数据库中。
如果您希望失败的队列插入数据库,请在运行listen时添加:
php artisan queue:listen connection-name --tries=3
运行失败的队列php artisan queue:retry all
希望我回答你的问题。
答案 2 :(得分:0)
一旦你的工作进入队列,根据你的问题,你有两个简单的选择:
在相同/不同的服务器上运行一个或多个队列侦听器(在Laravel文档中建议使用管理程序,请参阅sample configuration)
定期(crontab)
手动或自动运行队列工作程序php artisan队列:工作铁
此命令将从队列中获取一个作业并对其进行处理。你再次启动它 - 它再取一个,依此类推。
如果您不进行额外处理而您的队列驱动程序不是“同步” - 您的工作将永远不会看到日光。
我的建议 - 在开发/测试计算机上手动启动队列工作程序,并在生产服务器上使用管理程序。
如果您的项目很小并且不需要很好的可扩展性,您可能只想切换到“同步”驱动程序(将立即处理作业)。除非确实有必要,否则没有必要使基础设施更复杂!