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