Laravel 5.8不尊重作业类中指定的$ retryAfter

时间:2019-07-08 05:29:14

标签: php laravel queue laravel-5.8

我有一个Laravel,其中包含一些通常可以很快运行的作业。因此,我已将config / queue.php中的默认retry_after配置为20秒

'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'retry_after' => 20,
        ],

但是,我确实有一种作业类型,它可能需要更长的时间,最多可能要花几分钟,所以我已经升级到Laravel 5.8,以便能够指定特定于此类的重试参数:

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

    public $timeout = 600;
    public $tries = 3;
    public $retryAfter = 610;

但是,当我将LongJob调度到队列时,我在日志中发现该作业被调用了两次,即在调度时被调用,然后在20秒后被调用。

您能想到Laravel无法“看到”我的$ retryAfter选项的任何原因吗?据我了解,该选项应该覆盖全局设置?

编辑:经过进一步测试,似乎$ retryAfter和retry_after不能完全相同...根据我的尝试:

  • 将在retry_after秒后再次尝试作业,无论该作业是否仍在上一次尝试中运行
  • 当作业失败并释放回队列时,它将在$retryAfter秒后再次尝试

在我看来,正确的值应该是:

retry_after = 610; //As long as the longest timeout is + small buffer
$retryAfter = 5; //I'd like my job to be re-attempted quickly after it fails

不确定是错误还是功能...

0 个答案:

没有答案