Job.php 1.59 KB
<?php

namespace common\components\jqueue\redis;

use common\components\jqueue\base\Job as BaseJob;
use common\components\jqueue\helpers\ArrayHelper;
use function json_decode;

/**
 * Class Job
 * @package common\components\jqueue\db
 */
class Job extends BaseJob
{
    /**
     * json格式任务数据
     * @var
     */
    public $payload;

    /**
     * 获取任务已经尝试执行的次数
     * @return mixed
     */
    public function getAttempts()
    {
        return ArrayHelper::get((array)json_decode($this->payload, true), 'attempts');
    }

    /**
     * 获取任务的数据: 在redis中是一个JSON字符串
     * @return object
     */
    public function getPayload()
    {
        return $this->payload;
    }

    /**
     * 获取任务ID标识
     * @return string
     */
    public function getJobId()
    {
        return ArrayHelper::get((array)json_decode($this->payload, true), 'id');
    }

    /**
     * 从任务队列中删除任务
     * @return void
     */
    public function delete()
    {
        parent::delete();
        $this->queueInstance->deleteReserved($this->queueName, $this->payload);
    }

    /**
     * 设置任务数据
     * @param mixed $payload
     */
    public function setPayload($payload)
    {
        $this->payload = $payload;
    }
    /**
     * 将任务重新加入队列中
     * 此时,任务的尝试次数 +1
     * @param  int $delay
     * @return void
     */
    public function release($delay = 0)
    {
        parent::release($delay);
        $this->queueInstance->deleteAndRelease($this->queueName, $this->payload, $delay);
    }
}