关于 Laravel 队列的困惑

Confusions about Laravel Queues

我正在使用 Laravel Queues and I am using IronMQ。但是我对这个过程如何有点困惑。

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

现在我用

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

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

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

在我项目下的ironmQ账户中成功创建队列。

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

你可以做 php artisan queue:listen 它会启动所有列出的队列 或者如果您指定队列名称 php artisan queue:listen queue_name

别忘了 运行 php artisan queue:failed-table。这将使 failed_jobs table 在您的数据库中。

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

如果你想让失败的队列插入数据库,在 运行 listen:

时添加这个

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

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

希望我能回答你的问题。

你不需要去你的服务器并手动 运行 这个命令,你需要有一个进程来保持 运行ning,并执行这些工作。

我会推荐 "supervisord" http://supervisord.org/

此程序用于启动脚本并保持 运行ning,即使它失败,它也会重新启动它(当然直到一定数量的失败)

安装后,您可能应该创建此主管任务文件:

[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. 运行 same/different 服务器上的一个或多个队列侦听器(在 Laravel 文档中推荐使用主管,请参阅 sample configuration

  2. 运行 定期手动或自动排队工作人员 (crontab)

    phpartisanqueue:work铁

此命令将从队列中获取一个作业并进行处理。您再次启动它 – 它会再获取一个,依此类推。

如果您不进行额外处理并且您的队列驱动程序不是 'sync' – 您的工作将永远见不到曙光。

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

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