Laravel8队列jobs表的id与attempts对应不上
环境:Laravel8 + PHP7.4 + Ubuntu
我简单模拟一下,新建一个队列:
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
class PolicyOrder implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $params;
/**
* 任务尝试次数
*
* @var int
*/
public $tries = 5;
/**
* 任务超时设置(0:不限制)
*
* @var int
*/
public $timeout = 0;
/**
* 表示队列任务执行失败后,延迟30秒推送到消息队列重试
*
* @var int
*/
public $backoff = 30;
/**
* PolicyOrder constructor.
* @param $params
*/
public function __construct($params)
{
$this->params = $params;
}
/**
* @throws \Exception
*/
public function handle()
{
try {
Log::info('这个:', ['num'=>$this->attempts(),'jobid'=>$this->job->getJobId()]);
throw new \Exception('test');
} catch (\Exception $e) {
throw $e; //抛异常,可以重新放入队列,继续操作
}
}
}
就打印日志查看队列的执行了第几次以及id,尝试5次。
我们看结果【截了一部分】:
再看数据库存的:
有没有发现日志中的id,attempts和数据库里面的没有对应上【比如日志的第一次对应id是从33172-33176,在数据库里面第一次对应是33177-333181】
其实数据库里面的attempts是代表已经执行的次数没有包含本次【也就是说这条记录代表正在执行第(attempts+1)次任务】,因为本次还没有运行完。所以attempts是从0开始的:
看这张图,就和第一个日志信息对应上了,我的例子是运行5次,那么数据库会存attempts从0-4的记录。
最后一次截图:
本作品采用《CC 协议》,转载必须注明作者和本文链接