public function workJob() { $sleepTime = self::RUN_USLEEP; $newJob = null; try { $newJob = Base::getJob($this->queue); } catch (\Exception $ex) { $this->logger->addError($ex->getMessage()); $sleepTime = self::RUN_USLEEP * 5; } if (empty($newJob)) { $this->logger->addNotice("No Job found."); $sleepTime = self::RUN_USLEEP * 10; } else { try { if (empty($newJob->worker)) { throw new Exception("No worker declared."); } if (is_string($newJob->worker)) { $result_data = $this->processWorker($newJob->worker, $newJob); } elseif (is_array($newJob->worker)) { $this->logger->addInfo(sprintf("Running chained new job (%s) with workers", $newJob->job_id), $newJob->worker); foreach ($newJob->worker as $worker_name) { $result_data = $this->processWorker($worker_name, $newJob); $newJob->data = $result_data; } } return Base::updateJob($this->queue, $newJob->job_id, $result_data); } catch (\Exception $ex) { $this->logger->addError($ex->getMessage()); $this->logger->addInfo(sprintf('Releasing job (%s).', $newJob->job_id)); $this->queue->releaseJob($newJob->job_id); $sleepTime = self::RUN_USLEEP * 5; } } $this->logger->addInfo('Sleeping ' . ceil($sleepTime / 1000000) . ' seconds.'); usleep($sleepTime); }