/**
  * Create a new message.
  *
  * @param ZendQueue\Queue $queue
  * @param string          $body
  */
 protected function createMessage(Queue $queue, $body)
 {
     // check if message exist
     $message = $this->em->getRepository('Heri\\Bundle\\JobQueueBundle\\Entity\\Message')->findOneBy(['md5' => md5($body)]);
     if (!$message) {
         $message = new \Heri\Bundle\JobQueueBundle\Entity\Message();
         $message->setQueue($this->getQueueEntity($queue->getName()));
         $message->setBody($body);
         $message->setMd5(md5($body));
         $message->setPriority($this->priority);
         $message->setFailed(false);
         $message->setEnded(false);
         $this->em->persist($message);
         $this->em->flush();
         $this->em->clear();
     }
     return $message;
 }
 /**
  * Get messages of the queue.
  *
  * @param int             $maxMessages
  * @param int             $timeout
  * @param ZendQueue\Queue $queue
  * @param int             $microtime
  */
 protected function getMessages($maxMessages, $timeout, $queue = null, $microtime = null)
 {
     if ($maxMessages === null) {
         $maxMessages = 1;
     }
     if ($timeout === null) {
         $timeout = self::RECEIVE_TIMEOUT_DEFAULT;
     }
     $andWhere = '';
     if ($queue instanceof Queue) {
         $andWhere = 'AND (m.queue = :queue)';
     }
     // Search for all messages inside the timeout
     $sql = 'SELECT m ' . 'FROM Heri\\Bundle\\JobQueueBundle\\Entity\\Message m ' . 'LEFT JOIN m.queue q ' . 'WHERE (m.handle IS NULL OR m.handle = \'\' OR m.timeout + :timeout < :microtime) ' . $andWhere . ' ' . 'ORDER BY m.priority DESC';
     $query = $this->em->createQuery($sql);
     $query->setParameter('timeout', (int) $timeout);
     $query->setParameter('microtime', (int) $microtime);
     if ($queue instanceof Queue) {
         $query->setParameter('queue', $this->getQueueEntity($queue->getName()));
     }
     $query->setMaxResults($maxMessages);
     return $query->getResult();
 }
Beispiel #3
0
 /**
  * Subscribes the client to the queue.
  *
  * @param  \ZendQueue\Queue $queue
  * @return void
  */
 protected function subscribe(Queue $queue)
 {
     $frame = $this->_client->createFrame();
     $frame->setCommand('SUBSCRIBE');
     $frame->setHeader('destination', $queue->getName());
     $frame->setHeader('ack', 'client');
     $this->_client->send($frame);
     $this->_subscribed[$queue->getName()] = TRUE;
 }