コード例 #1
0
ファイル: Runner.php プロジェクト: nanderoo/php-queue
 public function workJob()
 {
     $sleepTime = self::RUN_USLEEP;
     $newJob = null;
     try {
         $newJob = \PHPQueue\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 \PHPQueue\Exception("No worker declared.");
             }
             if (is_string($newJob->worker)) {
                 $result_data = $this->processWorker($newJob->worker, $newJob);
             } else {
                 if (is_array($newJob->worker)) {
                     $this->logger->addInfo(sprintf("Running chained new job (%s) with workers", $new_job->job_id), $newJob->worker);
                     foreach ($newJob->worker as $worker_name) {
                         $result_data = $this->processWorker($worker_name, $newJob);
                         $newJob->data = $result_data;
                     }
                 }
             }
             return \PHPQueue\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);
             throw $ex;
         }
     }
     $this->logger->addInfo('Sleeping ' . ceil($sleepTime / 1000000) . ' seconds.');
     usleep($sleepTime);
 }
コード例 #2
0
ファイル: Cli.php プロジェクト: nanderoo/php-queue
 public function work()
 {
     $newJob = null;
     $queue = \PHPQueue\Base::getQueue($this->queue_name);
     try {
         $newJob = \PHPQueue\Base::getJob($queue);
         fwrite(STDOUT, "===========================================================\n");
         fwrite(STDOUT, "Next Job:\n");
         var_dump($newJob);
     } catch (Exception $ex) {
         fwrite(STDOUT, "Error: " . $ex->getMessage() . "\n");
     }
     if (empty($newJob)) {
         fwrite(STDOUT, "Notice: No Job found.\n");
         return;
     }
     try {
         if (empty($newJob->worker)) {
             throw new \PHPQueue\Exception("No worker declared.");
         }
         if (is_string($newJob->worker)) {
             $result_data = $this->processWorker($newJob->worker, $newJob);
         } else {
             if (is_array($newJob->worker)) {
                 foreach ($newJob->worker as $worker_name) {
                     $result_data = $this->processWorker($worker_name, $newJob);
                     $newJob->data = $result_data;
                 }
             }
         }
         fwrite(STDOUT, "Updating job... \n");
         return \PHPQueue\Base::updateJob($queue, $newJob->job_id, $result_data);
     } catch (Exception $ex) {
         fwrite(STDOUT, sprintf("\nError occured: %s\n", $ex->getMessage()));
         $queue->releaseJob($newJob->job_id);
         throw $ex;
     }
 }
コード例 #3
0
ファイル: REST.php プロジェクト: nanderoo/php-queue
 /**
  * Trigger a worker for a queue. Next item in the queue will be retrieved and worked with the appropriate worker.
  * @param string $queueName
  * @return stdClass
  */
 protected function work($queueName = null)
 {
     $queue = \PHPQueue\Base::getQueue($queueName);
     try {
         $newJob = \PHPQueue\Base::getJob($queue);
     } catch (Exception $ex) {
         return $this->failed(405, $ex->getMessage());
     }
     if (empty($newJob)) {
         return $this->failed(404, "No Job in queue.");
     }
     try {
         if (empty($newJob->worker)) {
             throw new \PHPQueue\Exception("No worker declared.");
         }
         if (is_string($newJob->worker)) {
             $result_data = $this->processWorker($newJob->worker, $newJob);
         } else {
             if (is_array($newJob->worker)) {
                 foreach ($newJob->worker as $worker_name) {
                     $result_data = $this->processWorker($worker_name, $newJob);
                     $newJob->data = $result_data;
                 }
             }
         }
         \PHPQueue\Base::updateJob($queue, $newJob->job_id, $result_data);
         return $this->successful();
     } catch (Exception $ex) {
         $queue->releaseJob($newJob->job_id);
         return $this->failed($ex->getCode(), $ex->getMessage());
     }
 }