首页 > 解决方案 > Laravel 排队作业的属性优先级

问题描述

我很难弄清楚 laravel 工作中属性的优先级是什么。目前,我有一个工作类triestimeout属性,如下所示:

class ProcessSmsJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $tries = 3;
    public $timeout = 300;
    public function __construct()
    {
     //
    }
    public function handle()
    {
     //
    }
}

比如说,在服务器中,队列工作者具有不同的属性,例如。tries = 1timeout = 700。我想知道的是,如果我将此代码推送到服务器,服务器队列工作者中定义的属性(尝试、超时)是否优先于当前定义的属性,或者服务器是否会根据此作业的属性运行队列这个工作?

另外,一个不相关的问题,如果有一个作业tries = 3并且该作业在第二次尝试时成功执行,那么记录不会存储在 failed_jobs 表中,对吗?那么有没有办法确定作业完成执行需要多少次尝试?

标签: laravelqueuejobs

解决方案


该文档指出:

指定作业可以尝试的最大次数的一种方法是通过--triesArtisan 命令行上的开关。这将适用于工作人员处理的所有作业,除非正在处理的作业指定了更具体的尝试次数

内部$tries作业类优先。

超时也是如此。但请确保您的$timeout值永远不会大于配置文件retry_after中的设置。queue.php

关于你的第二个问题:Laravel 本身正在跟踪它尝试工作的次数。所以也许工作本身有一个属性。核实。否则,您可以尝试自己实现一个计数器。


推荐阅读