master

laravel/framework

Last updated at: 29/12/2023 09:24

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;
    }
}