private IQueue ConstructQueue(Uri uri)
        {
            lock (_padlock)
            {
                RabbitMqConnector connector = null;
                var queuePath = new RabbitMqQueuePath(uri);

                var queueConfiguration = Configuration.FindQueueConfiguration(uri);

                if (queueConfiguration == null)
                {
                    Configuration.DeclareQueue(uri);
                    queueConfiguration = Configuration.FindQueueConfiguration(uri);
                }

                if (!_connectors.TryGetValue(uri, out connector))
                {
                    RabbitMqExchangeElement exchangeConfiguration = null;

                    if (!string.IsNullOrEmpty(queueConfiguration.Exchange))
                    {
                        exchangeConfiguration = Configuration.FindExchangeConfiguration(queueConfiguration.Exchange);
                        if (exchangeConfiguration == null)
                        {
                            throw new UndefinedExchangeException(string.Format(RabbitMqResources.UndefinedExchange, queueConfiguration.Exchange));
                        }
                    }

                    connector = new RabbitMqConnector(exchangeConfiguration, queueConfiguration, queuePath);
                    _connectors.Add(uri, connector);
                }

                return(new RabbitMqQueue(connector));
            }
        }
        public RabbitMqConnector(RabbitMqExchangeElement exchangeConfiguration, RabbitMqQueueElement queueConfiguration, RabbitMqQueuePath queuePath)
        {
            _exchangeConfiguration = exchangeConfiguration;
            QueueConfiguration     = queueConfiguration;
            QueuePath = queuePath;

            var port = QueuePath.ConnnectUri.Port < 1
                                ? AmqpTcpEndpoint.UseDefaultPort
                                : QueuePath.ConnnectUri.Port;

            var factory = new ConnectionFactory()
            {
                uri = QueuePath.ConnnectUri, Port = port
            };

            _connection = factory.CreateConnection();
        }