3

我正在使用Laravel 队列,我正在使用IronMQ。但我对这个过程如何有点困惑。

我已经设置了我的默认连接,queue.php as 'default' => 'iron'还在同一个文件中设置了 Iron 设置。

现在我用

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

createEventsclass 是按照 Laravel 教程中的说明创建的作业类。现在执行以下代码时

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

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

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

4

3 回答 3

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
于 2016-01-07T09:36:33.373 回答
1

您可以这样做php artisan queue:listen将启动所有列出的队列,或者如果您指定队列名称php artisan queue:listen queue_name

别忘了跑php artisan queue:failed-table。这将failed_jobs在您的数据库中创建表。

因此,如果队列运行时出现任何问题,它会将失败的队列保存到数据库中。

如果您希望失败的队列插入数据库,请在运行时添加以下内容:

php artisan queue:listen connection-name --tries=3

运行失败的队列php artisan queue:retry all

希望我回答你的问题。

于 2015-12-31T09:22:57.270 回答
0

一旦您的工作在队列中,并且根据您的问题,您有两个简单的选择:

  1. 在相同/不同的服务器上运行一个或多个队列监听器(在 Laravel 文档中推荐使用 supervisor,参见示例配置

  2. 定期手动或自动运行队列工作程序 (crontab)

    php工匠队列:工作铁

此命令将从队列中获取一项作业并进行处理。你再次启动它——它又获取了一个,依此类推。

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

我的建议 – 在您的开发/测试机器上手动启动队列工作器,并在生产服务器上使用主管。

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

于 2016-01-10T03:56:32.363 回答