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

时间:2017-02-01 22:44:56

标签: laravel

我无法理解Laravel queue:work和Laravel queue:listen

之间的区别

我可以看到:

  • 队列:收听给定队列
  • 工作:处理队列中的下一个作业

但仍然没有得到它,因为我已经尝试过两者,如果有任何新队列("工作选项"不只是运行一次),两者都会运行队列

我不是在谈论守护进程选项。就是这两个。

when i ran queue:work it works like listen

5 个答案:

答案 0 :(得分:25)

直到Laravel 5.2你有:listen:work

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

Listen将处理所有工作。

在Laravel 5.3 +中不再是这种情况。 Listen仍然存在,但已弃用,并计划在5.5中删除。您现在应该更喜欢:work

Work现在一个接一个地处理作业,但是你可以配置很多选项。

修改

在发布时上述情况属实,但从那时起事情发生了一些变化。

当您希望队列作为queue:work运行时,应首选

daemon。这将是一个长期存在的过程,在性能成为问题的情况下是有益的。这将使用应用程序的缓存版本,并且不会在每次处理作业时重新引导应用程序。

如果您不关心性能,或者您不希望在更改代码后重新启动队列,则应使用

queue:listen

  • 他们都会按照收到的顺序从队列中逐个弹出作业。
  • 他们共享几乎可以传递给他们的完全相同的选项。

答案 1 :(得分:2)

在Laravel 5.3+队列中:work运行守护程序侦听器。如果指定了preReceive on channel 'getSend1' postReceive on channel 'getSend1', message is null Received no Message during the poll, returning 'false' 标志,它也可能在5.2中出现。守护程序工作引导框架一次,然后重复处理作业。 --daemon命令在循环中运行queue:listen子过程,该循环每次迭代都会启动框架

queue:work --once应该几乎总是在生产中使用,因为它效率更高且使用的RAM更少。然而;您需要在每次核心更改后重新启动它。 queue:work对于开发和本地环境非常有用,因为您无需在代码更改后重新启动它(因为该框架正在重新启动每个作业)。

from here

答案 2 :(得分:1)

列出了两个不同的问题。

有工匠队列:工作和工匠队列:听

queue:work将弹出队列中的下一个作业,并仅处理该作业。这是一个关闭'处理完一个队列命令后将返回命令提示符的命令。 queue:listen将侦听队列,并继续处理它收到的任何队列命令。这将继续无限期地运行,直到你停止它。 在Laravel> = 4.2中添加了--daemon命令。它的工作方式只是直接运行队列,而不是在处理完每个队列后重新启动整个框架。这是一个可选命令,可显着降低队列的内存和CPU要求。

使用--daemon命令的重点是,当您升级应用程序时,需要使用queue:restart专门重新启动队列,否则您可能会遇到各种奇怪的错误,因为您的队列仍然有旧的内存中的代码。

所以回答你的问题"我应该使用哪个命令来运行守护进程?" - 答案几乎总是排队:work --daemon

答案 3 :(得分:0)

在哪里可以了解团队队列:听听?在文档(Laravel 5.4)中,它不是这样的描述。只有队列:工作。

that's detailed response to how it works in version 5.1

答案 4 :(得分:0)

  

webpack.conf Artisan命令包含{ test: /\.(ttf|eot|svg|jpg|gif|png|woff|woff2)$/, loader: 'file-loader' } 强制选项   队列工作者继续处理作业而不重新启动   框架。这样可以显着降低CPU使用率   与队列相比:listen命令:

     

如您所见,queue:work作业支持大多数相同的选项   可用于--daemon。你可以使用php artisan help queue:work   查看所有可用选项的工作。

https://laravel.com/docs/5.1/queues#running-the-queue-listener