Exemple #1
0
 /**
  * @param array $criteria
  * @return Job[]
  */
 public function findDelayed(array $criteria) : array
 {
     if (sizeof($criteria) === 0) {
         return [];
     }
     $search = [];
     $where = $this->buildPlainArray($criteria);
     foreach (Delayed::findByPlainData($where)->all() as $payload) {
         /** @var Delayed $payload */
         $search[] = new Job($this, $payload->getPayloadAttributes(), $payload->queue);
     }
     return $search;
 }
Exemple #2
0
 /**
  * @param array $payload
  * @return Delayed
  * @throws Exception
  */
 public static function push(array $payload)
 {
     $attributes = $payload;
     unset($attributes['id']);
     $delayed = new Delayed($attributes);
     if (!$delayed->save()) {
         throw new Exception('Cannot push delayed job', $delayed->getErrors());
     }
     return $delayed;
 }
 /**
  * @return int Count of pushed jobs
  */
 protected function processDelayed()
 {
     /** @var BaseQueue $queue */
     $queue = self::$queue;
     $sent = 0;
     foreach ($queue->getDelayedList() as $delayedJob) {
         /** @var Job $delayedJob */
         if ($this->debug) {
             echo "Job time: " . $delayedJob->getPayload()->getDelayTime() . ': now time ' . time() . "\n";
         }
         if ((int) $delayedJob->getPayload()->getDelayTime() <= time()) {
             echo "Delayed job is out of time at " . (time() - (int) $delayedJob->getPayload()->getDelayTime()) . " seconds\n";
             $job = Delayed::pop($delayedJob->getPayload()->getId());
             if ($job !== null) {
                 $queue->pushJob($delayedJob->getPayload());
                 $sent++;
             } else {
                 $this->stderr("But RPOP returned NULL ({$queue->delayedQueuePrefix})", Console::FG_RED);
             }
         }
         if ($this->poolGapSeconds > 0) {
             usleep($this->poolGapSeconds * 1000000);
         }
     }
     return $sent;
 }