Ejemplo n.º 1
0
 /**
  * @param string $exchangeName
  * @return integer
  */
 public function publishTo($exchangeName)
 {
     if (!$this->tracker->hasPublishedMessages($exchangeName)) {
         $mostRecentMessage = null;
         $messages = $this->store->allEvents();
     } else {
         $mostRecentMessage = $this->tracker->mostRecentPublishedMessage($exchangeName);
         $messages = $this->store->eventsStoredAfter($mostRecentMessage->mostRecentMessageId());
     }
     if (!$messages) {
         return 0;
     }
     $publishedMessages = 0;
     $lastPublishedNotification = null;
     try {
         $this->producer->open($exchangeName);
         foreach ($messages as $message) {
             $this->producer->send($exchangeName, $message);
             $lastPublishedNotification = $message;
             $publishedMessages++;
         }
         $this->producer->close($exchangeName);
     } catch (Exception $e) {
     } finally {
         if (!$mostRecentMessage) {
             $mostRecentMessage = new PublishedMessage($exchangeName, $lastPublishedNotification->id());
         } else {
             $mostRecentMessage->updateMostRecentMessageId($lastPublishedNotification->id());
         }
         $this->tracker->track($mostRecentMessage);
     }
     return $publishedMessages;
 }
 /**
  * @param PublishedMessage $mostRecentPublishedMessage
  * @throws InvalidPublishedMessageToTrack There can only be one last
  *     published message for exchange this exception's thrown if 2 are found
  */
 public function track(PublishedMessage $mostRecentPublishedMessage)
 {
     $builder = $this->createQueryBuilder('p');
     $builder->andWhere('p.exchangeName = :exchangeName')->setParameter('exchangeName', $mostRecentPublishedMessage->exchangeName());
     $currentMessage = $builder->getQuery()->getOneOrNullResult();
     if ($currentMessage && !$currentMessage->equals($mostRecentPublishedMessage)) {
         throw new InvalidPublishedMessageToTrack();
     }
     $this->_em->persist($mostRecentPublishedMessage);
     $this->_em->flush($mostRecentPublishedMessage);
 }