示例#1
0
        public async Task TestMasterLocator()
        {
            var factory = new RC.ConnectionFactory
            {
                Uri = new Uri("amqp://*****:*****@localhost:5672/")
            };
            var cf    = new CachingConnectionFactory(factory);
            var admin = new RabbitAdmin(cf);
            var queue = new AnonymousQueue();

            admin.DeclareQueue(queue);
            var client    = new HttpClient();
            var authToken = Encoding.ASCII.GetBytes("guest:guest");

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(authToken));

            var result = await client.GetAsync("http://localhost:15672/api/queues/%3F/" + queue.QueueName);

            var n = 0;

            while (n++ < 100 && result.StatusCode == HttpStatusCode.NotFound)
            {
                await Task.Delay(100);

                result = await client.GetAsync("http://localhost:15672/api/queues/%2F/" + queue.QueueName);
            }

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);
            var content = await result.Content.ReadAsStringAsync();

            Assert.Contains("x-queue-master-locator", content);
            Assert.Contains("client-local", content);

            queue = new AnonymousQueue
            {
                MasterLocator = null
            };
            admin.DeclareQueue(queue);

            result = await client.GetAsync("http://localhost:15672/api/queues/%3F/" + queue.QueueName);

            n = 0;
            while (n++ < 100 && result.StatusCode == HttpStatusCode.NotFound)
            {
                await Task.Delay(100);

                result = await client.GetAsync("http://localhost:15672/api/queues/%2F/" + queue.QueueName);
            }

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);
            content = await result.Content.ReadAsStringAsync();

            Assert.DoesNotContain("x-queue-master-locator", content);
            Assert.DoesNotContain("client-local", content);
            cf.Destroy();
        }
        public void TestQueueDeclareBad()
        {
            provider = services.BuildServiceProvider();
            var rabbitAdmin = provider.GetRabbitAdmin();

            rabbitAdmin.IgnoreDeclarationExceptions = true;
            var queue = new AnonymousQueue();

            Assert.Equal(queue.QueueName, rabbitAdmin.DeclareQueue(queue));
            var queue2 = new Queue(queue.QueueName);

            Assert.Null(rabbitAdmin.DeclareQueue(queue2));
            rabbitAdmin.DeleteQueue(queue2.QueueName);
        }
        private IConsumerDestination DoProvisionConsumerDestination(string name, string group, IConsumerOptions options)
        {
            var consumerProperties = Options.GetRabbitConsumerOptions(options.BindingName);
            var anonymous          = string.IsNullOrEmpty(group);
            Base64UrlNamingStrategy anonQueueNameGenerator = null;

            if (anonymous)
            {
                anonQueueNameGenerator = new Base64UrlNamingStrategy(consumerProperties.AnonymousGroupPrefix ?? string.Empty);
            }

            string baseQueueName;

            if (consumerProperties.QueueNameGroupOnly.GetValueOrDefault())
            {
                baseQueueName = anonymous ? anonQueueNameGenerator.GenerateName() : group;
            }
            else
            {
                baseQueueName = GetGroupedName(name, anonymous ? anonQueueNameGenerator.GenerateName() : group);
            }

            // logger.info("declaring queue for inbound: " + baseQueueName + ", bound to: " + name);
            var prefix       = consumerProperties.Prefix;
            var exchangeName = ApplyPrefix(prefix, name);
            var exchange     = BuildExchange(consumerProperties, exchangeName);

            if (consumerProperties.DeclareExchange.GetValueOrDefault())
            {
                DeclareExchange(exchangeName, exchange);
            }

            var   queueName   = ApplyPrefix(prefix, baseQueueName);
            var   partitioned = !anonymous && options.IsPartitioned;
            var   durable     = !anonymous && consumerProperties.DurableSubscription.Value;
            Queue queue;

            if (anonymous)
            {
                var anonQueueName = queueName;
                queue = new AnonymousQueue(new GivenNamingStrategy(() => anonQueueName), GetQueueArgs(queueName, consumerProperties, false));
            }
            else
            {
                if (partitioned)
                {
                    var partitionSuffix = "-" + options.InstanceIndex;
                    queueName += partitionSuffix;
                }

                if (durable)
                {
                    queue = new Queue(queueName, true, false, false, GetQueueArgs(queueName, consumerProperties, false));
                }
                else
                {
                    queue = new Queue(queueName, false, false, true, GetQueueArgs(queueName, consumerProperties, false));
                }
            }

            RabbitConfig.IBinding binding = null;
            if (consumerProperties.BindQueue.GetValueOrDefault())
            {
                DeclareQueue(queueName, queue);
                var routingKeys = BindingRoutingKeys(consumerProperties);
                if (routingKeys == null || routingKeys.Count == 0)
                {
                    binding = DeclareConsumerBindings(name, null, options, exchange, partitioned, queue);
                }
                else
                {
                    foreach (var routingKey in routingKeys)
                    {
                        binding = DeclareConsumerBindings(name, routingKey, options, exchange, partitioned, queue);
                    }
                }
            }

            if (durable)
            {
                AutoBindDLQ(ApplyPrefix(consumerProperties.Prefix, baseQueueName), queueName, consumerProperties);
            }

            return(new RabbitConsumerDestination(queue.QueueName, binding));
        }