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次。

我们看结果【截了一部分】:

Laravel8队列jobs表的id与attempts对应不上

再看数据库存的:

有没有发现日志中的id,attempts和数据库里面的没有对应上【比如日志的第一次对应id是从33172-33176,在数据库里面第一次对应是33177-333181】

其实数据库里面的attempts是代表已经执行的次数没有包含本次【也就是说这条记录代表正在执行第(attempts+1)次任务】,因为本次还没有运行完。所以attempts是从0开始的:

看这张图,就和第一个日志信息对应上了,我的例子是运行5次,那么数据库会存attempts从0-4的记录。

最后一次截图:
Laravel8队列jobs表的id与attempts对应不上

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!