SyncQueue.php
TLDR
The provided file, SyncQueue.php
, is a class in the Illuminate\Queue
namespace. The class represents a synchronous queue and extends the parent Queue
class and implements the QueueContract
interface. It contains methods for managing the queue, such as pushing and executing jobs synchronously.
Methods
size
This method returns the size of the queue.
push
This method pushes a new job onto the queue. It accepts the job name, job data, and an optional queue name as parameters. It executes the job synchronously by calling the executeJob
method.
executeJob
This protected method is responsible for executing a given job synchronously. It accepts the job name, job data, and an optional queue name as parameters. It creates a SyncJob
instance and fires the job. It handles any exceptions that occur during job execution by calling the handleException
method.
resolveJob
This protected method resolves a SyncJob
instance based on the job payload and queue name. It returns the resolved SyncJob
instance.
raiseBeforeJobEvent
This protected method raises the before queue job event if the container contains the events
binding. It dispatches a new JobProcessing
event with the connection name and the job instance as parameters.
raiseAfterJobEvent
This protected method raises the after queue job event if the container contains the events
binding. It dispatches a new JobProcessed
event with the connection name and the job instance as parameters.
raiseExceptionOccurredJobEvent
This protected method raises the exception occurred queue job event if the container contains the events
binding. It dispatches a new JobExceptionOccurred
event with the connection name, the job instance, and the exception instance as parameters.
handleException
This protected method handles an exception that occurred while processing a job. It raises the exception occurred queue job event by calling the raiseExceptionOccurredJobEvent
method, fails the job, and re-throws the exception.
pushRaw
This method is responsible for pushing a raw payload onto the queue. It accepts the payload, an optional queue name, and an array of options as parameters.
later
This method is responsible for pushing a new job onto the queue after a specified time delay. It accepts the delay (either a DateTimeInterface
, DateInterval
, or an integer representing the number of seconds), the job name, job data, and an optional queue name as parameters. It simply calls the push
method to push the job onto the queue.
pop
This method is responsible for popping the next job off of the queue. It accepts an optional queue name as a parameter. It returns a Job
instance or null
.
<?php
namespace Illuminate\Queue;
use Illuminate\Contracts\Queue\Job;
use Illuminate\Contracts\Queue\Queue as QueueContract;
use Illuminate\Queue\Events\JobExceptionOccurred;
use Illuminate\Queue\Events\JobProcessed;
use Illuminate\Queue\Events\JobProcessing;
use Illuminate\Queue\Jobs\SyncJob;
use Throwable;
class SyncQueue extends Queue implements QueueContract
{
/**
* Get the size of the queue.
*
* @param string|null $queue
* @return int
*/
public function size($queue = null)
{
return 0;
}
/**
* Push a new job onto the queue.
*
* @param string $job
* @param mixed $data
* @param string|null $queue
* @return mixed
*
* @throws \Throwable
*/
public function push($job, $data = '', $queue = null)
{
if ($this->shouldDispatchAfterCommit($job) &&
$this->container->bound('db.transactions')) {
return $this->container->make('db.transactions')->addCallback(
fn () => $this->executeJob($job, $data, $queue)
);
}
return $this->executeJob($job, $data, $queue);
}
/**
* Execute a given job synchronously.
*
* @param string $job
* @param mixed $data
* @param string|null $queue
* @return int
*
* @throws \Throwable
*/
protected function executeJob($job, $data = '', $queue = null)
{
$queueJob = $this->resolveJob($this->createPayload($job, $queue, $data), $queue);
try {
$this->raiseBeforeJobEvent($queueJob);
$queueJob->fire();
$this->raiseAfterJobEvent($queueJob);
} catch (Throwable $e) {
$this->handleException($queueJob, $e);
}
return 0;
}
/**
* Resolve a Sync job instance.
*
* @param string $payload
* @param string $queue
* @return \Illuminate\Queue\Jobs\SyncJob
*/
protected function resolveJob($payload, $queue)
{
return new SyncJob($this->container, $payload, $this->connectionName, $queue);
}
/**
* Raise the before queue job event.
*
* @param \Illuminate\Contracts\Queue\Job $job
* @return void
*/
protected function raiseBeforeJobEvent(Job $job)
{
if ($this->container->bound('events')) {
$this->container['events']->dispatch(new JobProcessing($this->connectionName, $job));
}
}
/**
* Raise the after queue job event.
*
* @param \Illuminate\Contracts\Queue\Job $job
* @return void
*/
protected function raiseAfterJobEvent(Job $job)
{
if ($this->container->bound('events')) {
$this->container['events']->dispatch(new JobProcessed($this->connectionName, $job));
}
}
/**
* Raise the exception occurred queue job event.
*
* @param \Illuminate\Contracts\Queue\Job $job
* @param \Throwable $e
* @return void
*/
protected function raiseExceptionOccurredJobEvent(Job $job, Throwable $e)
{
if ($this->container->bound('events')) {
$this->container['events']->dispatch(new JobExceptionOccurred($this->connectionName, $job, $e));
}
}
/**
* Handle an exception that occurred while processing a job.
*
* @param \Illuminate\Contracts\Queue\Job $queueJob
* @param \Throwable $e
* @return void
*
* @throws \Throwable
*/
protected function handleException(Job $queueJob, Throwable $e)
{
$this->raiseExceptionOccurredJobEvent($queueJob, $e);
$queueJob->fail($e);
throw $e;
}
/**
* Push a raw payload onto the queue.
*
* @param string $payload
* @param string|null $queue
* @param array $options
* @return mixed
*/
public function pushRaw($payload, $queue = null, array $options = [])
{
//
}
/**
* Push a new job onto the queue after (n) seconds.
*
* @param \DateTimeInterface|\DateInterval|int $delay
* @param string $job
* @param mixed $data
* @param string|null $queue
* @return mixed
*/
public function later($delay, $job, $data = '', $queue = null)
{
return $this->push($job, $data, $queue);
}
/**
* Pop the next job off of the queue.
*
* @param string|null $queue
* @return \Illuminate\Contracts\Queue\Job|null
*/
public function pop($queue = null)
{
//
}
}