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