queue:work --daemon和queue:listen之间有什么区别

laravel laravel-4 laravel-5

22447 观看

4回复

3663 作者的声誉

我正在设置我的离线作业服务器。我已经阅读了文档,但我仍然没有看到两个命令之间的差异:artisan queue:work --daemonartisan queue:listen。我应该使用哪个命令来运行我的守护进程?

作者: Logan Bailey 的来源 发布者: 2014 年 9 月 25 日

回应 (4)


113

49927 作者的声誉

决定

编辑更新2017-04-07:

现在有三种方法来运行队列:

  • queue:work - 这是新的“守护进程”进程(不再需要该标志)。该框架将启动“一次” - 然后继续循环工作。这将无限期地继续下去。它使用较少的内存/ CPU,queue:listen因为框架在整个时间内保持不变。您还必须记住使用queue:restart强制队列来更新在修补期间推送的任何代码更改。

  • queue:work --once - 这将激活框架,处理一个作业,然后关闭。适用于开发过程中的测试等

  • queue:listen - 这将在每个周期启动框架,处理一个作业,然后完全关闭,然后再次启动框架等,并无限循环。这意味着在处理每个作业后释放所有内存/进程。如果你有内存泄漏queue:work- 尝试一下。

--daemon标志不再对这些命令产生影响。

原始答案:

列出了两个不同的问题。

artisan queue:workartisan queue:listen

  • queue:work将简单地弹出队列中的下一个作业,并仅处理该作业。这是一个“一次性”命令,一旦处理完一个队列命令,它将返回到命令提示符。
  • queue:listen将侦听队列,并继续处理它收到的任何队列命令。这将继续无限期地运行,直到你停止它。

在Laravel> = 4.2中--daemon添加了一个命令。它的工作方式只是直接运行队列,而不是在处理完每个队列后重新启动整个框架。这是一个可选命令,可显着降低队列的内存和CPU要求。

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

那么回答你的问题“ 我应该使用哪个命令来运行我的守护进程? ” - 答案几乎总是如此queue:work --daemon

作者: Laurence 发布者: 25.09.2014 11:30

4

518 作者的声誉

最重要的区别是queue:work --daemon不会在每个作业上重新启动框架,但queue:listen 确实如此。事实上,listen为每项工作启动一个全新的Laravel流程。

亲自尝试:打开2个终端并work --daemon在一个和listen另一个中运行。该work窗口将比以下更快地执行作业listen

作者: Simon Fredsted 发布者: 11.10.2016 01:13

16

6194 作者的声誉

事情已经改变,但文件中没有提到

 --daemon  Run the worker in daemon mode (Deprecated)

现在默认情况下 php artisan queue:work以守护进程模式运行

所以queue:work继续处理作业而不重新启动框架

一旦命令运行它

php artisan queue:work --once

作者: Alupotha 发布者: 20.03.2017 03:01

0

675 作者的声誉

从Laravel 5.7 --stop-when-empty开始,该queue:work命令添加了一个新选项。使用此选项时,将处理当前队列,直到它为空,然后该命令将退出。

根据文件

--stop-when-empty选项可用于指示工作人员处理所有作业,然后优雅地退出。如果您希望在队列为空后关闭容器,则在Docker容器中运行Laravel队列时,此选项很有用:

php artisan queue:work --stop-when-empty
作者: PtrTon 发布者: 23.07.2019 09:07
32x32