/** * @param $class * @param $tries * @param QueuePayload $payload * @param \Exception $exception */ public static function add($class, $tries, QueuePayload $payload, \Exception $exception) { $failed = new FailedJobs(); $failed->class = $class; $failed->tries = $tries; $failed->payload = $payload->encode(); $failed->log_time = time(); $failed->stack_trace = $exception->getMessage(); $failed->stack_trace .= "\n\n" . $exception->getTraceAsString(); $failed->save(false); }
/** * @param QueuePayload $payload * @throws \Exception * @throws \yii\base\InvalidConfigException */ protected function resolveAndRun(QueuePayload $payload) { list($class, $method) = $this->resolveJob($payload->getClass()); $instance = Yii::createObject(['class' => $class]); if ($instance instanceof BaseTask) { $instance->beforeRun($this, $payload); } try { if ($instance instanceof QueueWorker) { $instance->run($this, $payload->getParams()); } else { call_user_func([$instance, $method], $this, $payload->getParams()); } } catch (\Exception $ex) { if ($instance instanceof BaseTask) { $instance->onFail($this, $payload, $ex); } throw $ex; } if ($instance instanceof BaseTask) { $instance->afterRun($this, $payload); } }
/** * @param QueuePayload $payload */ public function pushJob(QueuePayload $payload) { $this->push($payload->getClass(), $payload->getParams(), $payload->getQueueName() ?? 'default'); }