/**
  * 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);
     }
 }