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