queue:work –daemon和queue:listen之间的区别是什么?
我正在设置我的离线作业服务器。 我已经阅读了文档,但是我仍然没有真正看到两个命令之间的区别: artisan queue:work --daemon
和artisan queue:listen
。 我应该使用哪个命令来运行我的守护进程?
编辑更新2017-04-07:
现在有三种方法来运行你的队列:
-
queue:work
– 这是新的“守护进程”进程(该标志不再需要)。 该框架将“一次”启动 – 然后继续循环工作。 这将无限期地继续下去。 它比queue:listen
使用更less的内存/ CPUqueue:listen
因为框架保持整个时间。 您还必须记得使用queue:restart
来强制队列更新您在修补期间推送的任何代码更改。 -
queue:work --once
–queue:work --once
– 这将启动框架,处理一个工作,然后关机。 在开发过程中用于testing -
queue:listen
– 这将在每个循环中启动框架,处理一个工作,然后完全closures,然后再次启动框架等,并无限循环。 这意味着所有内存/进程在每个作业被处理之后被释放。 如果你有内存泄漏与queue:work
– 试试这个。
--daemon
标志不再对这些命令有影响。
原始答案:
列出了两个不同的问题。
有artisan queue:work
和artisan 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
,另一个listen
。 work
窗口将比listen
更快地执行工作。