コード例 #1
0
 /**
  * Publish a message to the queue
  *
  * @param \Flowpack\JobQueue\Common\Queue\Message $message
  * @return void
  */
 public function submit(\Flowpack\JobQueue\Common\Queue\Message $message)
 {
     if ($message->getIdentifier() !== NULL) {
         $added = $this->client->sadd("queue:{$this->name}:ids", $message->getIdentifier());
         if (!$added) {
             return;
         }
     }
     $encodedMessage = $this->encodeMessage($message);
     $this->client->lpush("queue:{$this->name}:messages", $encodedMessage);
     $message->setState(\Flowpack\JobQueue\Common\Queue\Message::STATE_SUBMITTED);
 }
コード例 #2
0
 /**
  * Mark a message as finished
  *
  * @param Message $message
  * @return boolean TRUE if the message could be removed
  */
 public function finish(Message $message)
 {
     $success = $this->connection->exec('DELETE FROM processing WHERE rowid=' . (int) $message->getIdentifier());
     if ($success) {
         $message->setState(Message::STATE_DONE);
     }
     return $success;
 }
コード例 #3
0
 /**
  * @param QueueInterface $queue
  * @param Message $message
  * @return void
  * @throws JobQueueException
  * @internal This method has to be public so that it can be run from the command handler (when "executeIsolated" is set). It is not meant to be called from "user land"
  */
 public function executeJobForMessage(QueueInterface $queue, Message $message)
 {
     // TODO stabilize unserialize() call (maybe using PHPs unserialize_callback_func directive)
     $job = unserialize($message->getPayload());
     if (!$job instanceof JobInterface) {
         throw new \RuntimeException(sprintf('The message "%s" in queue "%s" could not be unserialized to a class implementing JobInterface', $message->getIdentifier(), $queue->getName()), 1465901245);
     }
     $jobExecutionSuccess = $job->execute($queue, $message);
     if (!$jobExecutionSuccess) {
         throw new JobQueueException(sprintf('execute() for job "%s" did not return TRUE', $job->getLabel()), 1468927872);
     }
 }