我正在使用Laravel Queues,我正在使用IronMQ。但我对这个过程有点困惑。
我已经在queue.php as 'default' => 'iron'
中设置了我的默认连接,并在同一文件中设置了熨斗设置。
现在我使用
$this->dispatch(new createEvents($data, $user));
而CCD_ 2类是如Laravel教程中所述创建的作业类。现在,当执行以下代码时,
$this->dispatch(new createEvents($data, $user));
它成功地在项目下的ironmQ帐户中创建了一个队列。
现在我的困惑开始了。我已经将一些任务排入该队列,但现在我将如何运行该队列?我将如何运行排队的任务?我需要为它创建一些额外的代码吗?还是需要为它做一些设置。请指导
您不需要去服务器手动运行这个命令,您需要有一个持续运行的进程,并执行这些作业。
我会推荐"监督员"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
您可以执行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
希望我能回答你的问题。
一旦你的工作在队列中,根据你的问题,你有两个简单的选项:
-
在相同/不同的服务器上运行一个或多个队列侦听器(Laravel文档中建议使用supervisor,请参阅示例配置)
-
定期手动或自动运行队列工作程序(crontab)
php手工队列:workiron
这个命令将从队列中获取一个作业并对其进行处理。您再次启动它——它会再获取一个,依此类推
如果你不做额外的处理,而你的队列驱动程序没有"同步",你的工作就永远不会有起色。
我的建议——在开发/测试机器上手动启动队列工作程序,并在生产服务器上使用supervisor。
如果你的项目很小,并且不需要很好的可扩展性,你可能只想切换到"同步"驱动程序(作业将立即处理)。没有必要让基础设施变得更加复杂,除非有真正的必要!