RedisJob.php
TLDR
This file, RedisJob.php
, contains the implementation of the RedisJob
class. The class extends the Job
class and implements the JobContract
interface. It provides methods to interact with a Redis queue, such as getting the raw job body, deleting a job from the queue, releasing a job back into the queue, and retrieving job information.
Methods
There are several methods defined in the RedisJob
class:
__construct(Container $container, RedisQueue $redis, $job, $reserved, $connectionName, $queue)
This is the constructor method that creates a new instance of the RedisJob
class. It takes in a Container
instance, a RedisQueue
instance, the original job payload, the raw job payload in the reserved queue, the connection name, and the queue name.
getRawBody()
This method returns the raw body string for the job.
delete()
This method deletes the job from the queue.
release($delay = 0)
This method releases the job back into the queue after a specified delay (if provided).
attempts()
This method returns the number of times the job has been attempted.
getJobId()
This method returns the job identifier.
getRedisQueue()
This method returns the underlying Redis queue instance.
getReservedJob()
This method returns the underlying reserved Redis job.
Classes
There are no additional classes defined in this file.
<?php
namespace Illuminate\Queue\Jobs;
use Illuminate\Container\Container;
use Illuminate\Contracts\Queue\Job as JobContract;
use Illuminate\Queue\RedisQueue;
class RedisJob extends Job implements JobContract
{
/**
* The Redis queue instance.
*
* @var \Illuminate\Queue\RedisQueue
*/
protected $redis;
/**
* The Redis raw job payload.
*
* @var string
*/
protected $job;
/**
* The JSON decoded version of "$job".
*
* @var array
*/
protected $decoded;
/**
* The Redis job payload inside the reserved queue.
*
* @var string
*/
protected $reserved;
/**
* Create a new job instance.
*
* @param \Illuminate\Container\Container $container
* @param \Illuminate\Queue\RedisQueue $redis
* @param string $job
* @param string $reserved
* @param string $connectionName
* @param string $queue
* @return void
*/
public function __construct(Container $container, RedisQueue $redis, $job, $reserved, $connectionName, $queue)
{
// The $job variable is the original job JSON as it existed in the ready queue while
// the $reserved variable is the raw JSON in the reserved queue. The exact format
// of the reserved job is required in order for us to properly delete its data.
$this->job = $job;
$this->redis = $redis;
$this->queue = $queue;
$this->reserved = $reserved;
$this->container = $container;
$this->connectionName = $connectionName;
$this->decoded = $this->payload();
}
/**
* Get the raw body string for the job.
*
* @return string
*/
public function getRawBody()
{
return $this->job;
}
/**
* Delete the job from the queue.
*
* @return void
*/
public function delete()
{
parent::delete();
$this->redis->deleteReserved($this->queue, $this);
}
/**
* Release the job back into the queue after (n) seconds.
*
* @param int $delay
* @return void
*/
public function release($delay = 0)
{
parent::release($delay);
$this->redis->deleteAndRelease($this->queue, $this, $delay);
}
/**
* Get the number of times the job has been attempted.
*
* @return int
*/
public function attempts()
{
return ($this->decoded['attempts'] ?? null) + 1;
}
/**
* Get the job identifier.
*
* @return string|null
*/
public function getJobId()
{
return $this->decoded['id'] ?? null;
}
/**
* Get the underlying Redis factory implementation.
*
* @return \Illuminate\Queue\RedisQueue
*/
public function getRedisQueue()
{
return $this->redis;
}
/**
* Get the underlying reserved Redis job.
*
* @return string
*/
public function getReservedJob()
{
return $this->reserved;
}
}