Exemple #1
0
 /**
  * @param ContainerInterface $container
  * @return Exchange
  * @throws Exception\InvalidArgumentException
  */
 public function __invoke(ContainerInterface $container) : Exchange
 {
     $config = $container->get('config');
     $options = $this->options($config, $this->exchangeName);
     if (null === $this->channel) {
         $connection = $container->get($options['connection']);
         $this->channel = $connection->newChannel();
     }
     $exchange = $this->channel->newExchange();
     $exchange->setArguments($options['arguments']);
     $exchange->setName($options['name']);
     $exchange->setFlags($this->getFlags($options));
     $exchange->setType($options['type']);
     if ($this->autoSetupFabric || $options['auto_setup_fabric']) {
         if (isset($options['arguments']['alternate-exchange'])) {
             // auto setup fabric alternate exchange
             $exchangeName = $options['arguments']['alternate-exchange'];
             ExchangeFactory::$exchangeName($container, $this->channel, true);
         }
         $exchange->declareExchange();
         // rabbitmq extension: exchange to exchange bindings
         foreach ($options['exchange_bindings'] as $exchangeName => $bindOptions) {
             ExchangeFactory::$exchangeName($container, $this->channel, true);
             if (empty($bindOptions)) {
                 $this->bindExchange($exchange, $exchangeName, [], []);
             } else {
                 foreach ($bindOptions as $bindOption) {
                     $routingKeys = $bindOption['routing_keys'] ?? [];
                     $bindArguments = $bindOption['arguments'] ?? [];
                     $this->bindExchange($exchange, $exchangeName, $routingKeys, $bindArguments);
                 }
             }
         }
     }
     return $exchange;
 }