queue:work –daemon和queue:listen之间的区别是什么?

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

编辑更新2017-04-07:

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

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

  • queue:work --oncequeue:work --once – 这将启动框架,处理一个工作,然后关机。 在开发过程中用于testing

  • queue:listen – 这将在每个循环中启动框架,处理一个工作,然后完全closures,然后再次启动框架等,并无限循环。 这意味着所有内存/进程在每个作业被处理之后被释放。 如果你有内存泄漏与queue:work – 试试这个。

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

原始答案:

列出了两个不同的问题。

artisan queue:workartisan queue:listen

  • queue:work只会popupqueue:work的下一个作业,并只处理一个作业。 这是一个“one off”命令,一旦处理了一个队列命令,它将返回命令提示符。
  • queue:listen将监听队列,并继续处理它接收到的任何队列命令。 这将继续无限期地运行,直到你停下来。

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

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

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

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

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

现在默认的 php artisan queue:work在守护进程模式下运行,

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

对于运行它一旦命令是,

php artisan queue:work --once

最重要的区别是queue:work --daemon不会在每个作业上重新启动框架,而是queue:listen 。 实际上, listen每个工作都会启动一个全新的Laravelstream程。

自己尝试:打开2个terminal,在其中一个运行work --daemon ,另一个listenwork窗口将比listen更快地执行工作。