SqsJob.php
TLDR
The SqsJob.php
file in the Illuminate\Queue\Jobs
namespace is a class that represents a job for the Amazon Simple Queue Service (SQS) in Laravel's Queue component. It extends the Job
class and implements the JobContract
interface. The file provides various methods to interact with SQS jobs, such as releasing, deleting, and getting job information.
Methods
__construct
The constructor method initializes the SqsJob
instance with the provided container, SQS client, job data, connection name, and queue name.
release
The release
method releases the job back into the queue with an optional delay in seconds. It extends the parent class's release
method and uses the SQS client to change the message visibility timeout.
delete
The delete
method deletes the job from the queue. It extends the parent class's delete
method and uses the SQS client to delete the message.
attempts
The attempts
method returns the number of times the job has been attempted. It retrieves the approximate receive count from the SQS job data.
getJobId
The getJobId
method returns the job identifier. It retrieves the message ID from the SQS job data.
getRawBody
The getRawBody
method returns the raw body string for the job. It retrieves the body from the SQS job data.
getSqs
The getSqs
method returns the underlying SQS client instance used by the job.
getSqsJob
The getSqsJob
method returns the underlying raw SQS job data.
Classes
No classes are defined in this file.
<?php
namespace Illuminate\Queue\Jobs;
use Aws\Sqs\SqsClient;
use Illuminate\Container\Container;
use Illuminate\Contracts\Queue\Job as JobContract;
class SqsJob extends Job implements JobContract
{
/**
* The Amazon SQS client instance.
*
* @var \Aws\Sqs\SqsClient
*/
protected $sqs;
/**
* The Amazon SQS job instance.
*
* @var array
*/
protected $job;
/**
* Create a new job instance.
*
* @param \Illuminate\Container\Container $container
* @param \Aws\Sqs\SqsClient $sqs
* @param array $job
* @param string $connectionName
* @param string $queue
* @return void
*/
public function __construct(Container $container, SqsClient $sqs, array $job, $connectionName, $queue)
{
$this->sqs = $sqs;
$this->job = $job;
$this->queue = $queue;
$this->container = $container;
$this->connectionName = $connectionName;
}
/**
* Release the job back into the queue after (n) seconds.
*
* @param int $delay
* @return void
*/
public function release($delay = 0)
{
parent::release($delay);
$this->sqs->changeMessageVisibility([
'QueueUrl' => $this->queue,
'ReceiptHandle' => $this->job['ReceiptHandle'],
'VisibilityTimeout' => $delay,
]);
}
/**
* Delete the job from the queue.
*
* @return void
*/
public function delete()
{
parent::delete();
$this->sqs->deleteMessage([
'QueueUrl' => $this->queue, 'ReceiptHandle' => $this->job['ReceiptHandle'],
]);
}
/**
* Get the number of times the job has been attempted.
*
* @return int
*/
public function attempts()
{
return (int) $this->job['Attributes']['ApproximateReceiveCount'];
}
/**
* Get the job identifier.
*
* @return string
*/
public function getJobId()
{
return $this->job['MessageId'];
}
/**
* Get the raw body string for the job.
*
* @return string
*/
public function getRawBody()
{
return $this->job['Body'];
}
/**
* Get the underlying SQS client instance.
*
* @return \Aws\Sqs\SqsClient
*/
public function getSqs()
{
return $this->sqs;
}
/**
* Get the underlying raw SQS job.
*
* @return array
*/
public function getSqsJob()
{
return $this->job;
}
}