Laravel 队列:工作和队列:倾听有什么区别
我不明白LaravelLaravel 队列:工作和队列:倾听有什么区别,laravel,Laravel,我不明白Laravelqueue:work和Laravelqueue:listen 我可以看到: 队列:侦听给定的队列 工作:处理队列上的下一个作业 但仍然不明白,因为我已经尝试了这两种方法,如果有任何新队列,这两种方法都将运行队列(“工作选项”不只是运行一次) 我不是说守护程序选项。就这两个 queue:workArtisan命令包含一个用于强制执行的--daemon选项 队列辅助进程继续处理作业,而无需重新启动 框架。这将显著降低CPU使用率 与queue:listen命令相比: 如您
queue:work
和Laravelqueue:listen
我可以看到:
- 队列:侦听给定的队列
- 工作:处理队列上的下一个作业
queue:work
Artisan命令包含一个用于强制执行的--daemon
选项
队列辅助进程继续处理作业,而无需重新启动
框架。这将显著降低CPU使用率
与queue:listen命令相比:
如您所见,queue:work
job支持大多数相同的选项
可用于队列:侦听
。您可以使用php artisan帮助queue:work
作业以查看所有可用选项
直到拉威尔
5.2
你有:听和:工作
Work
将处理队列中的第一个作业
Listen
将处理所有作业
在Laravel5.3
+中,情况不再如此Listen
仍然存在,但它已被弃用,并计划在5.5
中删除。你最好现在就开始工作
Work
现在可以一个接一个地处理作业,但您可以配置过多的选项
编辑
上述情况在发帖时是正确的,但从那以后情况有所改变
当您希望队列作为守护进程运行时,应首选队列:工作。这将是一个长期的过程,如果性能是一个问题,这将是有益的。这将使用应用程序的缓存版本,并且不会在每次处理作业时重新引导应用程序
queue:listen
在您不关心性能或不想在更改代码后重新启动队列时应使用
- 它们都会在收到作业时将作业逐个从队列中弹出
- 他们都拥有几乎完全相同的期权,可以传递给他们
列出了两个不同的问题
有artisan队列:工作和artisan队列:侦听
队列:工作将从队列中的下一个作业弹出,并仅处理该作业。这是一个“一次性”命令,处理完“一个队列”命令后将返回命令提示符。
队列:listen将侦听队列,并继续处理它接收到的任何队列命令。这将无限期地继续运行,直到您停止它。
在Laravel>=4.2中添加了一个--daemon命令。它的工作方式就是直接运行队列,而不是在处理每个队列后重新启动整个框架。这是一个可选命令,可显著降低队列的内存和cpu需求
使用--daemon命令的重要一点是,当您升级应用程序时,您需要使用queue:restart专门重新启动队列,否则您可能会得到各种奇怪的错误,因为您的队列内存中仍然有旧代码
因此,要回答您的问题“我应该使用哪个命令来运行我的守护进程?”——答案几乎总是队列:work——daemon在Laravel 5.3+队列:work运行守护进程侦听器。如果您指定了
--daemon
标志,也可以在5.2中使用它。守护进程工作一次引导框架,然后重复处理作业。queue:listen
命令在一个循环中运行一个queue:work--one
子进程,该循环引导每个迭代的框架
queue:work
应该经常在生产中使用,因为它效率更高,占用的内存更少。然而;您需要在每次核心更改后重新启动它<代码>队列:listen
对于开发和本地环境很有用,因为在代码更改后不必重新启动它(因为框架正在重新启动每个作业)
可能重复的可能重复的可能重复的再次询问如果没有--daemon选项,我相信我仍然错过了一些东西:当我写到“因为我已经尝试了这两种方法,如果有任何新的队列(“工作选项”不只是运行一次)”时,这两种方法都将运行队列。所以当你说,返回到命令propmt时,它不会发生,它的工作原理类似于listen,我在我的问题中添加了一个新的映像,我再次强调,我不是在询问守护进程选项anks的答案,所以基本上没有任何选择:倾听和工作现在是一样的?@mistercat如果你运行5.4
应用程序环境,你应该完全忘记listen
,并坚持在Laravel 5.2中work
:工作不允许超时,所以无论你对我说什么,我都必须使用:listenw“有些东西被弃用了”。。请提供一个参考,并说明原因,但是“弃用的”listen
对于本地开发更好,因为它总是运行最新的代码,而不是在执行/启动命令时作为work
do执行的代码快照。。很好的解释,我很困惑,因为forge使用了“--守护进程“以工作线程的方式运行队列时的标志