Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php
Строк: 164
<?php

namespace IlluminateQueueJobs;

use 
AwsSqsSqsClient;
use 
IlluminateContainerContainer;
use 
IlluminateContractsQueueJob as JobContract;
use 
IlluminateSupportArr;

class 
SqsJob extends Job implements JobContract
{
    
/**
     * The Amazon SQS client instance.
     *
     * @var AwsSqsSqsClient
     */
    
protected $sqs;

    
/**
     * The Amazon SQS job instance.
     *
     * @var array
     */
    
protected $job;

    
/**
     * The overflow storage options for large payload offloading.
     *
     * @var array
     */
    
protected $overflowStorage = [];

    
/**
     * The cached raw body of the job.
     *
     * @var string|null
     */
    
protected $cachedRawBody null;

    
/**
     * Create a new job instance.
     *
     * @param  IlluminateContainerContainer  $container
     * @param  AwsSqsSqsClient  $sqs
     * @param  array  $job
     * @param  string  $connectionName
     * @param  string  $queue
     * @param  array  $overflowStorage
     */
    
public function __construct(Container $containerSqsClient $sqs, array $job$connectionName$queue, array $overflowStorage = [])
    {
        
$this->sqs $sqs;
        
$this->job $job;
        
$this->queue $queue;
        
$this->container $container;
        
$this->connectionName $connectionName;
        
$this->overflowStorage $overflowStorage;
    }

    
/**
     * 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'],
        ]);

        if (
Arr::get($this->overflowStorage'delete_after_processing') &&
            
$pointer $this->overflowPointer()) {
            
$this->overflowStore()->forget($pointer);
        }
    }

    
/**
     * 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()
    {
        if (
$this->cachedRawBody !== null) {
            return 
$this->cachedRawBody;
        }

        if (
$pointer $this->overflowPointer()) {
            return 
$this->cachedRawBody $this->overflowStore()->get($pointer);
        }

        return 
$this->job['Body'];
    }

    
/**
     * Resolve the pointer path from the job body, if present.
     *
     * @return string|null
     */
    
protected function overflowPointer()
    {
        if (! 
Arr::get($this->overflowStorage'enabled'false)) {
            return 
null;
        }

        
$body $this->job['Body'] ?? null;

        if (! 
is_string($body) || $body === '') {
            return 
null;
        }

        
$decoded json_decode($bodytrue);

        if (! 
is_array($decoded) || ! isset($decoded['@pointer'])) {
            return 
null;
        }

        return 
is_string($decoded['@pointer']) ? $decoded['@pointer'] : null;
    }

    
/**
     * Resolve the configured cache store for extended storage.
     *
     * @return IlluminateContractsCacheRepository
     */
    
protected function overflowStore()
    {
        return 
$this->container->make('cache')->store(
            
Arr::get($this->overflowStorage'store')
        );
    }

    
/**
     * Get the underlying SQS client instance.
     *
     * @return AwsSqsSqsClient
     */
    
public function getSqs()
    {
        return 
$this->sqs;
    }

    
/**
     * Get the underlying raw SQS job.
     *
     * @return array
     */
    
public function getSqsJob()
    {
        return 
$this->job;
    }
}
Онлайн: 2
Реклама