【问题标题】:What is the difference queue:work and queue:listenqueue:work 和 queue:listen 有什么区别
【发布时间】:2017-06-18 21:03:08
【问题描述】:

我不明白 Laravel queue:work 和 Laravel queue:listen 有什么区别

我可以看到:

  • 队列:监听给定队列
  • 工作:处理队列中的下一个作业

但还是不明白,因为我都试过了,如果有任何新队列,两者都会运行队列(“工作选项”不只是运行一次)

我不是在谈论守护进程选项。就这两个。

【问题讨论】:

标签: laravel


【解决方案1】:

在 Laravel 5.2 之前,你有 :listen:work

Work 将处理队列中的第一个作业。

Listen 将处理所有通过的作业。

在 Laravel 5.3+ 中不再是这种情况。 Listen 仍然存在,但已弃用并计划在 5.5 中删除。你现在应该更喜欢:work

Work 现在一个接一个地处理作业,但您可以配置的选项过多。

编辑

在发帖时上述情况是正确的,但从那以后情况发生了一些变化。

当您希望队列以daemon 运行时,应该首选queue:work。这将是一个长期存在的过程,在性能存在问题的情况下将是有益的。这将使用应用程序的缓存版本,并且不会在每次处理作业时重新引导应用程序。

queue:listen 应在您不关心性能或不想在更改代码后重新启动队列时使用。

  • 他们都会按收到的一一一从队列中弹出作业。
  • 他们都共享几乎可以传递给他们的完全相同的选项。

【讨论】:

  • 感谢您的回答,所以基本上没有任何选择:听和工作现在是一样的吗?
  • @mistercat 如果您正在运行5.4 应用程序环境,您应该完全忘记listen,并坚持使用work
  • 在 Laravel 5.2 中:work 不允许 --timeout,所以我不得不使用 :listen
  • 每当您发表“某些东西已被弃用”的盛大声明时..请提供参考
  • 不知道为什么,但“已弃用”listen 更适合本地开发,因为它始终运行最新代码,而不是命令执行/启动时的代码快照 @ 987654338@做..
【解决方案2】:

在 Laravel 5.3+ 中 queue:work 运行一个守护进程监听器。如果您指定 --daemon 标志,它也可以在 5.2 中。守护进程工作启动框架一次,然后重复处理作业。 queue:listen 命令在循环中运行queue:work --once 子进程,每次迭代都会启动框架

queue:work 应该几乎总是在生产中使用,因为它更高效并且使用更少的 RAM。然而;您需要在每次核心更改后重新启动它。 queue:listen 对于开发和本地环境很有用,因为您不必在代码更改后重新启动它(因为框架会重新启动每个作业)。

from here

【讨论】:

  • 很好的解释,我很困惑,因为 forge 在像 worker 一样运行队列时使用了“--daemon”标志
【解决方案3】:

queue:work Artisan 命令包含一个用于强制的--daemon 选项 队列工作者继续处理作业而无需重新启动 框架。这会显着降低 CPU 使用率 与 queue:listen 命令相比:

如您所见,queue:work 作业支持大多数相同的选项 可用于queue:listen。您可以使用 php artisan help queue:work 查看所有可用选项的作业。

https://laravel.com/docs/5.1/queues#running-the-queue-listener

【讨论】:

    【解决方案4】:

    列出了两个不同的问题。

    有工匠队列:工作和工匠队列:听

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

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

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

    【讨论】:

    • 谢谢,我相信我仍然想念一些东西:当我写“因为我已经尝试过两者,如果有任何新队列(“工作选项”不只是运行一次),两者都会运行队列“。所以当你说的时候,返回命令propmt,它不会发生,它就像听一样,
    • 我在我的问题中添加了一个新图像,并且我再次没有询问守护程序选项
    猜你喜欢
    • 2014-11-20
    • 2019-05-12
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    相关资源
    最近更新 更多