我有一个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
不确定是错误还是功能...