Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel queue:work--daemon和queue:listen之间的区别是什么_Laravel_Laravel 4_Laravel 5 - Fatal编程技术网

Laravel queue:work--daemon和queue:listen之间的区别是什么

Laravel queue:work--daemon和queue:listen之间的区别是什么,laravel,laravel-4,laravel-5,Laravel,Laravel 4,Laravel 5,我正在设置脱机作业服务器。我已经阅读了文档,但仍然没有真正看到这两个命令之间的区别:artisanqueue:work--daemon和artisanqueue:listen。我应该使用哪个命令来运行我的守护进程?编辑更新2017-04-07: 现在有三种方法可以运行队列: 队列:工作-这是新的“守护进程”进程(不再需要该标志)。该框架将“一次”启动,然后继续在作业中循环。这将无限期地继续下去。它比queue:listen使用更少的内存/cpu,因为框架在整个时间内都保持不动。您还必须记住使用

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

编辑更新2017-04-07:

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

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

  • 队列:工作——一旦
    ——这将启动框架,处理一个作业,然后关闭。用于在开发等过程中进行测试

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

--daemon
标志不再对这些命令有效

原始答案:

列出了两个不同的问题

artisan队列:工作
artisan队列:侦听

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

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


因此,要回答您的问题“我应该使用哪个命令来运行我的守护进程?”——答案几乎总是
队列:工作-守护进程

最重要的区别是
队列:工作-守护进程
不会在每个作业上重新启动框架,但
队列:侦听
会重新启动框架。事实上,
listen
为每个作业启动一个全新的Laravel流程

自己尝试:打开两个终端,一个运行
work--daemon
,另一个运行
listen
work
窗口执行作业的速度比
listen

快得多,但文档中没有提到它

 --daemon  Run the worker in daemon mode (Deprecated)
现在默认情况下
php artisan队列:工作
以守护程序模式运行

因此
queue:work
在不重新启动框架的情况下继续处理作业

对于一次运行命令


php artisan队列:工作--once

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

根据报告:

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


如何在后台运行守护程序?我应该把重新启动队列的代码放在哪里?如果您使用--daemon标志运行,您需要认真对待文档中的内存警告。如果您正在处理大文件或执行其他内存密集型操作,则该进程可能会泄漏至少一些内存,并最终崩溃。我甚至尝试过在这些工作中释放内存,但收效甚微。最好使用Supervisor生成新的Queue::work进程。我仍然不明白Queue:listen和Queue:work--daemon之间的区别。queue:listen无限期地运行,queue:work——守护进程也无限期地运行,而不重新加载框架,那么有什么区别呢?工作和侦听看起来几乎是一样的,只是有些区别。您如何处理队列,然后在不侦听更多事件的情况下退出?@Lucas-是的,正确。要么处理一个作业并退出,要么无限期地处理。中间没有。不正确,它不在deamon模式下运行,它保持用户界面打开,不在后台运行。。。
php artisan queue:work --stop-when-empty