我正在设置离线作业服务器。我已经阅读了文档,但是仍然看不到这两个命令之间的区别:artisan queue:work --daemon
和artisan queue:listen
。我应该使用哪个命令来运行守护程序?
我正在设置离线作业服务器。我已经阅读了文档,但是仍然看不到这两个命令之间的区别:artisan queue:work --daemon
和artisan queue:listen
。我应该使用哪个命令来运行守护程序?
Answers:
编辑更新2017-04-07:
现在有三种运行队列的方法:
queue:work
-这是新的“守护程序”过程(不再需要该标志)。该框架将“一次”启动-然后继续循环执行这些作业。这将无限期继续。queue:listen
与框架持续使用时间相比,它使用更少的内存/ cpu 。您还必须记住使用queue:restart
强制队列更新在修补过程中推送的所有代码更改。
queue:work --once
-这将启动框架,处理一项工作,然后关闭。在开发等过程中进行测试很有用。
queue:listen
-这将在每个周期启动框架,处理一项工作,然后完全关闭,然后再次启动框架,并无限期循环。这意味着在处理每个作业后释放所有内存/进程。如果您遇到内存泄漏,请queue:work
尝试一下。
该--daemon
标志不再对这些命令有影响。
原始答案:
列出了两个不同的问题。
有artisan queue:work
和artisan queue:listen
queue:work
只会弹出队列中的下一个作业,并仅处理该作业。这是一个“一次性”命令,一旦处理了一个队列命令,它将返回命令提示符。queue:listen
将监听队列,并继续处理收到的任何队列命令。这将无限期继续运行,直到您将其停止。在Laravel> = 4.2中,--daemon
添加了一个命令。它的工作方式是直接保持队列直接运行,而不是在处理完每个队列后重新启动整个框架。这是一个可选命令,可大大减少队列的内存和cpu要求。
该--daemon
命令的重点是,当您升级应用程序时,您需要使用专门重新启动队列queue:restart
,否则您可能会遇到各种奇怪的错误,因为您的队列中仍然有旧代码。
因此,回答您的问题“我应该使用哪个命令来运行守护程序? ”-答案几乎总是queue:work --daemon
最重要的区别是queue:work --daemon
不会在每个作业上重新启动框架,但queue:listen
会重新启动。实际上,listen
为每个作业启动一个全新的Laravel流程。
自己尝试:打开2个终端,然后work --daemon
在另一个listen
中运行。该work
窗口将速度远远超过执行作业listen
。