我正在使用Laravel队列和Redis with Horizon。
主管正在运行artisan horizon
,这反过来会产生进程/usr/bin/php7.2 artisan horizon:work redis
是否需要运行queue:work
或者Horizon是否已经自行处理队列?
答案 0 :(得分:4)
安装Horizon后,Artisan queue:work
和horizon:work
命令执行相同的任务,但horizon:work
接受用于与Horizon主管协调的参数。
运行Horizon管理程序进程(通过artisan horizon
)时,我们永远不需要手动执行horizon:work
。 horizon:work
命令启动队列工作进程,主管在设置工作池时自动运行它。
通过主管,我指的是Horizon管理器流程,而不是我们用来启动Horizon即服务的系统 supervisord 。
事实上,horizon:work
被标记为隐藏,因此我们甚至不会在artisan list
显示的可用命令中看到它。
我们仍然可以手动执行artisan queue:work
来运行一个不受Horizon管理的独立队列工作。
artisan queue:work --once <connection>
命令更有用 - 它处理队列中的下一个待处理项,可以帮助调试开发中的行为不端的作业。
为了使其生效,我们需要在停止任何长时间运行的队列工作程序后运行它,以便我们可以控制作业执行的时间。 Horizon让这一切变得简单:
php artisan horizon:terminate