Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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); });
                }
            }
        }