/**
  * @param VhostConfiguration $configuration
  *
  * @return bool
  */
 public function exists(VhostConfiguration $configuration)
 {
     try {
         $configuration->getClient()->vhosts()->get($configuration->getName());
     } catch (ClientErrorResponseException $e) {
         $this->handleNotFoundException($e);
         return false;
     }
     return true;
 }
 /**
  * @param VhostConfiguration $configuration
  * @param $name
  * @param $queue
  */
 private function createQueue(VhostConfiguration $configuration, $name, $queue)
 {
     try {
         $remoteQueue = $configuration->getClient()->queues()->get($configuration->getName(), $name);
     } catch (ClientErrorResponseException $e) {
         $this->handleNotFoundException($e);
         $configuration->getClient()->queues()->create($configuration->getName(), $name, $queue);
     }
     if ($configuration->isDeleteAllowed() && isset($remoteQueue) && !$this->isUpToDate($queue, $remoteQueue)) {
         $configuration->getClient()->queues()->delete($configuration->getName(), $name);
         $configuration->getClient()->queues()->create($configuration->getName(), $name, $queue);
     }
 }
 /**
  * @param VhostConfiguration $configuration
  */
 public function define(VhostConfiguration $configuration)
 {
     foreach ($configuration->getConfiguration('exchanges') as $exchange) {
         $name = $exchange['name'];
         unset($exchange['name']);
         try {
             $remoteExchange = $configuration->getClient()->exchanges()->get($configuration->getName(), $name);
         } catch (ClientErrorResponseException $e) {
             $this->handleNotFoundException($e);
             $configuration->getClient()->exchanges()->create($configuration->getName(), $name, $exchange);
         }
         if ($configuration->isDeleteAllowed() && isset($remoteExchange) && !$this->isUpToDate($exchange, $remoteExchange)) {
             $configuration->getClient()->exchanges()->delete($configuration->getName(), $name);
             $configuration->getClient()->exchanges()->create($configuration->getName(), $name, $exchange);
         }
     }
 }
 /**
  * @param VhostConfiguration $configuration
  * @param $queue
  * @param array $binding
  */
 private function createBinding(VhostConfiguration $configuration, $queue, array $binding)
 {
     $configuration->getClient()->bindings()->create($configuration->getName(), $binding['exchange'], $queue, isset($binding['routing_key']) ? $binding['routing_key'] : null);
 }
 /**
  * @param VhostConfiguration $configuration
  */
 public function define(VhostConfiguration $configuration)
 {
     foreach ($configuration->getConfiguration('permissions') as $user => $permission) {
         try {
             $remotePermission = $configuration->getClient()->permissions()->get($configuration->getName(), $user);
         } catch (ClientErrorResponseException $e) {
             $this->handleNotFoundException($e);
             $configuration->getClient()->permissions()->create($configuration->getName(), $user, $permission);
         }
         if ($configuration->isDeleteAllowed() && isset($remotePermission) && !$this->isUpToDate($permission, $remotePermission)) {
             $configuration->getClient()->permissions()->delete($configuration->getName(), $user);
             $configuration->getClient()->permissions()->create($configuration->getName(), $user, $permission);
         }
     }
 }