Beispiel #1
0
        public IQueue GetQueue(string uri)
        {
            Guard.AgainstNullOrEmptyString(uri, "uri");

            var queue =
                _queues.Find(
                    candidate => Find(candidate, uri));

            if (queue != null)
            {
                return(queue);
            }

            lock (Padlock)
            {
                queue =
                    _queues.Find(
                        candidate => Find(candidate, uri));

                if (queue != null)
                {
                    return(queue);
                }

                var queueUri = new Uri(uri);

                if (queueUri.Scheme.Equals("resolver"))
                {
                    var resolvedQueueUri = _uriResolver.GetTarget(queueUri);

                    if (resolvedQueueUri == null)
                    {
                        throw new KeyNotFoundException(string.Format(EsbResources.UriNameNotFoundException,
                                                                     _uriResolver.GetType().FullName,
                                                                     uri));
                    }

                    queue = new ResolvedQueue(CreateQueue(GetQueueFactory(resolvedQueueUri), resolvedQueueUri),
                                              queueUri);
                }
                else
                {
                    queue = CreateQueue(GetQueueFactory(queueUri), queueUri);
                }

                _queues.Add(queue);

                return(queue);
            }
        }