繁体   English   中英

工匠队列:工作和工匠地平线:工作有什么区别?

[英]What is the difference between artisan queue:work and artisan horizon:work?

我将 Laravel 队列和 Redis 与 Horizon 一起使用。 主管正在运行artisan horizon ,这反过来会产生进程/usr/bin/php7.2 artisan horizon:work redis

是否需要运行queue:work或者 Horizon 已经可以自己处理队列?

安装Horizo​​n后,Artisan queue:workhorizon:work命令执行相同的任务,但horizon:work除外horizon:work接受用于与Horizo​​n主管协调的参数。

在运行Horizo​​n管理程序进程时(通过artisan horizon ),我们永远不需要执行horizon:work手动horizon:work horizon:work命令启动队列工作进程,主管在设置工作池时自动运行它。

通过主管 ,我的意思是Horizo​​n经理流程,而不是我们用来启动Horizo​​n作为服务的系统监督

事实上, horizon:work被标记为隐藏 ,因此我们甚至不会在artisan list显示的可用命令中看到它。

我们仍然可以执行artisan queue:work手动artisan queue:work以运行不受Horizo​​n管理的单个独立队列工作程序。

artisan queue:work --once <connection>命令更有用 - 它处理队列中的下一个待处理项,并可以帮助调试开发中的行为不端的作业。

为了使其有效,我们需要在停止任何长时间运行的队列工作程序后运行它,以便我们可以控制作业执行的时间。 Horizo​​n让这一切变得简单:

php artisan horizon:terminate

Cy Rossignol 的回答是正确的。 但我会补充更多。

官方文档中说:

Laravel Horizon 要求您使用 Redis 为队列供电。 因此,您应确保在应用程序的 config/queue.php 配置文件中将队列连接设置为 redis。

所以 Horizon 是 Laravel 工作器的增强版,具有仪表板和其他功能,但它仅适用于 Redis。 不像默认的 Laravel 队列工作程序支持文件、数据库和其他受 Laravel 支持的驱动程序。

使用 Horizon 的好处:

  • 有一个指标仪表板,提供有关您的工作和队列等待时间和吞吐量的信息
  • 能够发送 webhook 或 Slack 或 SMS 通知
  • 有能力暂停和恢复
  • 能够在仪表板中查看并重试失败的作业
  • 具有工人平衡策略(简单、自动和错误)
  • 具有更多自定义配置,例如 maxProcesses、balanceMaxShift、balanceCooldown 等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM