关于Laravel队列的困惑

时间:2015-12-31 09:04:29

标签: laravel queue jobs ironmq

我正在使用Laravel Queues而我正在使用IronMQ。但我对这个过程有点困惑。

我已在queue.php as 'default' => 'iron'中设置了默认连接,并在同一文件中设置了铁设置。

现在我用

 $this->dispatch(new createEvents($data, $user));

虽然createEvents类是Laravel教程中解释的创建的作业类。现在执行以下代码时

$this->dispatch(new createEvents($data, $user));

它在项目下的ironmQ帐户中成功创建了一个队列。

现在我的困惑开始了。我已将一些任务排队到该队列但现在我将如何运行该队列?我如何运行排队的任务?我是否需要为它创建一些额外的代码,或者我是否需要为它做一些设置。请指导

3 个答案:

答案 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)

一旦你的工作进入队列,根据你的问题,你有两个简单的选择:

  1. 在相同/不同的服务器上运行一个或多个队列侦听器(在Laravel文档中建议使用管理程序,请参阅sample configuration

  2. 定期(crontab)

    手动或自动运行队列工作程序

    php artisan队列:工作铁

  3. 此命令将从队列中获取一个作业并对其进行处理。你再次启动它 - 它再取一个,依此类推。

    如果您不进行额外处理而您的队列驱动程序不是“同步” - 您的工作将永远不会看到日光。

    我的建议 - 在开发/测试计算机上手动启动队列工作程序,并在生产服务器上使用管理程序。

    如果您的项目很小并且不需要很好的可扩展性,您可能只想切换到“同步”驱动程序(将立即处理作业)。除非确实有必要,否则没有必要使基础设施更复杂!