【问题标题】:Laravel queue priority and reservedLaravel 队列优先级和保留
【发布时间】:2016-09-27 16:31:55
【问题描述】:

我对 laravel --queue 选项和 reserved 列(使用 mysql)有点困惑。
1-正如 laravel 文档所述:

php artisan queue:listen --queue=high,low

在此示例中,将始终处理高队列上的作业 在从低队列转移到作业之前。

假设我有一个high 工作和多个low 工作。工作high 被解雇,并且由于问题被推回队列以在 60 秒后再次触发。在此期间会发生什么?工作low 开始了吗?

2- queue:work --daemon 是否像 queue:listen 一样工作?我的意思是它会像listen 那样处理所有工作吗?

3- reserved 列的用途是什么?

【问题讨论】:

    标签: laravel queue


    【解决方案1】:
    1. 我只能在这里猜测,但我假设 high 作业将在 low 之前重试。这就是为什么在运行 worker 时应该使用 tries=3(or whatever) 标志或将 public $tries = 5; 添加到 Job 类的原因。或者你可以利用InteractsWithQueue trait 进行更精细的控制。

    2. 我相信,当你使用queue:work 命令时,以后的 Laravel 版本默认以守护模式运行。守护进程工作寿命长,工作速度更快,因为它们不需要为每个新作业重新启动整个框架。 queue:listen 命令甚至没有记录在最新(5.4)版本的文档中。此命令生成的工作程序在每次作业轮询之前重新启动。就个人而言,我仍然使用它,因为我在运行守护进程时遇到了内存问题。

    3. 据我了解,此列是标记特定作业何时开始执行的方式。在queue.php 配置文件中,您可以指定连接何时重试作业。我认为连接决定是否应通过查看reserved 列重试该作业。

    【讨论】:

      【解决方案2】:

      由于没有公认的答案,而我碰巧搜索和调查了所有这些问题,让我来回答一下:

      1. 来自low 的作业将被处理,至少持续 60 秒。 60 秒后,来自high 的作业将变为可用,因此它将在剩余的low 作业之前处理。

      2. 在 2019 年 3 月撰写本文时,从版本 5:3 开始,建议使用队列的方式是 queue:work,即 queue:listen 的守护程序版本

      3. 在当前版本中,有一个 reserved_at 列表示作业被分配给工作人员处理它的时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-20
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-18
        • 1970-01-01
        • 2013-02-13
        相关资源
        最近更新 更多