123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- <?php
-
- namespace Illuminate\Queue;
-
- use DateTimeInterface;
- use Illuminate\Container\Container;
- use Illuminate\Support\InteractsWithTime;
-
- abstract class Queue
- {
- use InteractsWithTime;
-
- /**
- * The IoC container instance.
- *
- * @var \Illuminate\Container\Container
- */
- protected $container;
-
- /**
- * The connection name for the queue.
- *
- * @var string
- */
- protected $connectionName;
-
- /**
- * Push a new job onto the queue.
- *
- * @param string $queue
- * @param string $job
- * @param mixed $data
- * @return mixed
- */
- public function pushOn($queue, $job, $data = '')
- {
- return $this->push($job, $data, $queue);
- }
-
- /**
- * Push a new job onto the queue after a delay.
- *
- * @param string $queue
- * @param \DateTimeInterface|\DateInterval|int $delay
- * @param string $job
- * @param mixed $data
- * @return mixed
- */
- public function laterOn($queue, $delay, $job, $data = '')
- {
- return $this->later($delay, $job, $data, $queue);
- }
-
- /**
- * Push an array of jobs onto the queue.
- *
- * @param array $jobs
- * @param mixed $data
- * @param string $queue
- * @return mixed
- */
- public function bulk($jobs, $data = '', $queue = null)
- {
- foreach ((array) $jobs as $job) {
- $this->push($job, $data, $queue);
- }
- }
-
- /**
- * Create a payload string from the given job and data.
- *
- * @param string $job
- * @param mixed $data
- * @return string
- *
- * @throws \Illuminate\Queue\InvalidPayloadException
- */
- protected function createPayload($job, $data = '')
- {
- $payload = json_encode($this->createPayloadArray($job, $data));
-
- if (JSON_ERROR_NONE !== json_last_error()) {
- throw new InvalidPayloadException(
- 'Unable to JSON encode payload. Error code: '.json_last_error()
- );
- }
-
- return $payload;
- }
-
- /**
- * Create a payload array from the given job and data.
- *
- * @param string $job
- * @param mixed $data
- * @return array
- */
- protected function createPayloadArray($job, $data = '')
- {
- return is_object($job)
- ? $this->createObjectPayload($job)
- : $this->createStringPayload($job, $data);
- }
-
- /**
- * Create a payload for an object-based queue handler.
- *
- * @param mixed $job
- * @return array
- */
- protected function createObjectPayload($job)
- {
- return [
- 'displayName' => $this->getDisplayName($job),
- 'job' => 'Illuminate\Queue\CallQueuedHandler@call',
- 'maxTries' => $job->tries ?? null,
- 'timeout' => $job->timeout ?? null,
- 'timeoutAt' => $this->getJobExpiration($job),
- 'data' => [
- 'commandName' => get_class($job),
- 'command' => serialize(clone $job),
- ],
- ];
- }
-
- /**
- * Get the display name for the given job.
- *
- * @param mixed $job
- * @return string
- */
- protected function getDisplayName($job)
- {
- return method_exists($job, 'displayName')
- ? $job->displayName() : get_class($job);
- }
-
- /**
- * Get the expiration timestamp for an object-based queue handler.
- *
- * @param mixed $job
- * @return mixed
- */
- public function getJobExpiration($job)
- {
- if (! method_exists($job, 'retryUntil') && ! isset($job->timeoutAt)) {
- return;
- }
-
- $expiration = $job->timeoutAt ?? $job->retryUntil();
-
- return $expiration instanceof DateTimeInterface
- ? $expiration->getTimestamp() : $expiration;
- }
-
- /**
- * Create a typical, string based queue payload array.
- *
- * @param string $job
- * @param mixed $data
- * @return array
- */
- protected function createStringPayload($job, $data)
- {
- return [
- 'displayName' => is_string($job) ? explode('@', $job)[0] : null,
- 'job' => $job, 'maxTries' => null,
- 'timeout' => null, 'data' => $data,
- ];
- }
-
- /**
- * Get the connection name for the queue.
- *
- * @return string
- */
- public function getConnectionName()
- {
- return $this->connectionName;
- }
-
- /**
- * Set the connection name for the queue.
- *
- * @param string $name
- * @return $this
- */
- public function setConnectionName($name)
- {
- $this->connectionName = $name;
-
- return $this;
- }
-
- /**
- * Set the IoC container instance.
- *
- * @param \Illuminate\Container\Container $container
- * @return void
- */
- public function setContainer(Container $container)
- {
- $this->container = $container;
- }
- }
|