Laravel 队列:工作和队列:倾听有什么区别

Laravel 队列:工作和队列:倾听有什么区别,laravel,Laravel,我不明白Laravelqueue:work和Laravelqueue:listen 我可以看到: 队列:侦听给定的队列 工作:处理队列上的下一个作业 但仍然不明白,因为我已经尝试了这两种方法,如果有任何新队列,这两种方法都将运行队列(“工作选项”不只是运行一次) 我不是说守护程序选项。就这两个 queue:workArtisan命令包含一个用于强制执行的--daemon选项 队列辅助进程继续处理作业,而无需重新启动 框架。这将显著降低CPU使用率 与queue:listen命令相比: 如您

我不明白Laravel
queue:work
和Laravel
queue:listen

我可以看到:

  • 队列:侦听给定的队列
  • 工作:处理队列上的下一个作业
但仍然不明白,因为我已经尝试了这两种方法,如果有任何新队列,这两种方法都将运行队列(“工作选项”不只是运行一次)

我不是说守护程序选项。就这两个

queue:work
Artisan命令包含一个用于强制执行的
--daemon
选项 队列辅助进程继续处理作业,而无需重新启动 框架。这将显著降低CPU使用率 与queue:listen命令相比:

如您所见,
queue:work
job支持大多数相同的选项 可用于
队列:侦听
。您可以使用php artisan帮助
queue:work
作业以查看所有可用选项


直到拉威尔
5.2
你有
:听
:工作

Work
将处理队列中的第一个作业

Listen
将处理所有作业

在Laravel
5.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使用了“--守护进程“以工作线程的方式运行队列时的标志