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