public async Task <ILinkExchange> ExchangeDeclare( string name, LinkExchangeType type, bool durable = true, bool autoDelete = false, string alternateExchange = null, bool delayed = false ) { if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentNullException(nameof(name)); } string exchangeType; switch (type) { case LinkExchangeType.Direct: exchangeType = ExchangeType.Direct; break; case LinkExchangeType.Fanout: exchangeType = ExchangeType.Fanout; break; case LinkExchangeType.Headers: exchangeType = ExchangeType.Headers; break; case LinkExchangeType.Topic: exchangeType = ExchangeType.Topic; break; default: throw new ArgumentOutOfRangeException(nameof(type)); } var arguments = new Dictionary <string, object>(); if (!string.IsNullOrWhiteSpace(alternateExchange)) { arguments.Add("alternate-exchange", alternateExchange !); } if (delayed) { arguments.Add("x-delayed-type", exchangeType); exchangeType = "x-delayed-message"; } await _invoker .InvokeAsync(model => model.ExchangeDeclare(name, exchangeType, durable, autoDelete, arguments)) .ConfigureAwait(false); _logger.Debug( $"Declared exchange \"{name}\", type: {exchangeType}, durable: {durable}, autoDelete: {autoDelete}, arguments: {string.Join(", ", arguments.Select(x => $"{x.Key} = {x.Value}"))}"); return(new LinkExchange(name)); }
public void TopologyExchangeConfig(LinkExchangeType exchangeType, bool durable, bool autoDelete, string alternateExhange, bool delayed) { using (var rabbitConneciton = TestsOptions.GetConnection()) { var rabbitModel = rabbitConneciton.CreateModel(); var exchangeName = TestsOptions.TestExchangeName; using (var link = TestsOptions.GetLinkBuilder().Build()) { Assert.ThrowsAny <Exception>(() => { rabbitModel.ExchangeDeclarePassive(exchangeName); }); rabbitModel = rabbitConneciton.CreateModel(); link.Topology .Handler(async cfg => { var e1 = await cfg.ExchangeDeclare(exchangeName, exchangeType, durable, autoDelete, alternateExhange, delayed); var e2 = await cfg.ExchangeDeclare(exchangeName + "-second", exchangeType, durable, autoDelete, alternateExhange, delayed); await cfg.ExchangeDeclarePassive(exchangeName); await cfg.ExchangeDeclareDefault(); await cfg.Bind(e2, e1); await cfg.Bind(e2, e1, "test"); }) .WaitAsync() .GetAwaiter() .GetResult(); rabbitModel.ExchangeDeclarePassive(exchangeName); rabbitModel.ExchangeDeclarePassive(exchangeName + "-second"); link.Topology .Handler(async cfg => { var e1 = await cfg.ExchangeDeclarePassive(exchangeName); var e2 = await cfg.ExchangeDeclarePassive(exchangeName + "-second"); await cfg.ExchangeDelete(e1); await cfg.ExchangeDelete(e2); }) .WaitAsync() .GetAwaiter() .GetResult(); Assert.ThrowsAny <Exception>(() => { rabbitModel.ExchangeDeclarePassive(exchangeName); }); } } }