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)); }