Uri GetQueueAddress(QueueConfigurator configurator, Uri hostAddress, string suffix)
        {
            var queueName    = configurator.QueueName + suffix;
            var sendSettings = new RabbitMqSendSettings(queueName, ExchangeTypeSelector.DefaultExchangeType, configurator.Durable, configurator.AutoDelete);

            sendSettings.BindToQueue(queueName);

            return(sendSettings.GetSendAddress(hostAddress));
        }
Beispiel #2
0
        public SendSettings GetSendSettings(Uri address)
        {
            var name = address.AbsolutePath.Substring(1);

            string[] pathSegments = name.Split('/');
            if (pathSegments.Length == 2)
            {
                name = pathSegments[1];
            }

            if (name == "*")
            {
                throw new ArgumentException("Cannot send to a dynamic address");
            }

            EntityNameValidator.ThrowIfInvalidEntityName(name);

            var isTemporary = address.Query.GetValueFromQueryString("temporary", false);

            var durable    = address.Query.GetValueFromQueryString("durable", !isTemporary);
            var autoDelete = address.Query.GetValueFromQueryString("autodelete", isTemporary);

            var exchangeType = address.Query.GetValueFromQueryString("type") ?? ExchangeTypeSelector.DefaultExchangeType;

            var settings = new RabbitMqSendSettings(name, exchangeType, durable, autoDelete);

            var bindToQueue = address.Query.GetValueFromQueryString("bind", false);

            if (bindToQueue)
            {
                var queueName = WebUtility.UrlDecode(address.Query.GetValueFromQueryString("queue"));
                settings.BindToQueue(queueName);
            }

            var delayedType = address.Query.GetValueFromQueryString("delayedType");

            if (!string.IsNullOrWhiteSpace(delayedType))
            {
                settings.SetExchangeArgument("x-delayed-type", delayedType);
            }

            var bindExchange = address.Query.GetValueFromQueryString("bindexchange");

            if (!string.IsNullOrWhiteSpace(bindExchange))
            {
                settings.BindToExchange(bindExchange);
            }

            var alternateExchange = address.Query.GetValueFromQueryString("alternateexchange");

            if (!string.IsNullOrWhiteSpace(alternateExchange))
            {
                settings.SetExchangeArgument("alternate-exchange", alternateExchange);
            }

            return(settings);
        }
Beispiel #3
0
        /// <summary>
        /// Return the send settings for the address
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public static SendSettings GetSendSettings(this Uri address)
        {
            if (string.Compare("rabbitmq", address.Scheme, StringComparison.OrdinalIgnoreCase) != 0)
            {
                throw new RabbitMqAddressException("The invalid scheme was specified: " + address.Scheme);
            }

            string name = address.AbsolutePath.Substring(1);

            string[] pathSegments = name.Split('/');
            if (pathSegments.Length == 2)
            {
                name = pathSegments[1];
            }


            if (name == "*")
            {
                throw new ArgumentException("Cannot send to a dynamic address");
            }

            VerifyQueueOrExchangeNameIsLegal(name);

            bool isTemporary = address.Query.GetValueFromQueryString("temporary", false);

            bool durable    = address.Query.GetValueFromQueryString("durable", !isTemporary);
            bool autoDelete = address.Query.GetValueFromQueryString("autodelete", isTemporary);

            string exchangeType = address.Query.GetValueFromQueryString("type") ?? ExchangeType.Fanout;

            var settings = new RabbitMqSendSettings(name, exchangeType, durable, autoDelete);

            bool bindToQueue = address.Query.GetValueFromQueryString("bind", false);

            if (bindToQueue)
            {
                string queueName = WebUtility.UrlDecode(address.Query.GetValueFromQueryString("queue"));
                settings.BindToQueue(queueName);
            }

            string delayedType = address.Query.GetValueFromQueryString("delayedType");

            if (!string.IsNullOrWhiteSpace(delayedType))
            {
                settings.SetExchangeArgument("x-delayed-type", delayedType);
            }

            string bindExchange = address.Query.GetValueFromQueryString("bindexchange");

            if (!string.IsNullOrWhiteSpace(bindExchange))
            {
                settings.BindToExchange(bindExchange);
            }

            return(settings);
        }
        protected override Uri GetDeadLetterAddress()
        {
            string errorQueueName = _settings.QueueName + "_skipped";
            var    sendSettings   = new RabbitMqSendSettings(errorQueueName, RabbitMQ.Client.ExchangeType.Fanout, _settings.Durable,
                                                             _settings.AutoDelete);

            sendSettings.BindToQueue(errorQueueName);

            return(_host.Settings.GetSendAddress(sendSettings));
        }
        protected override Uri GetErrorAddress()
        {
            string errorQueueName = _settings.QueueName + "_error";
            var    sendSettings   = new RabbitMqSendSettings(errorQueueName, RabbitMQ.Client.ExchangeType.Fanout, true,
                                                             false);

            sendSettings.BindToQueue(errorQueueName);

            return(_host.Settings.GetSendAddress(sendSettings));
        }
        protected override Uri GetErrorAddress()
        {
            var errorQueueName = _settings.QueueName + "_error";
            var sendSettings   = new RabbitMqSendSettings(errorQueueName, RabbitMQ.Client.ExchangeType.Fanout, _settings.Durable,
                                                          _settings.AutoDelete);

            sendSettings.BindToQueue(errorQueueName);

            return(sendSettings.GetSendAddress(_host.Settings.HostAddress));
        }
        Uri GetDelayExchangeAddress(ReceiveSettings receiveSettings)
        {
            string delayExchangeName = receiveSettings.QueueName + "_delay";
            var    sendSettings      = new RabbitMqSendSettings(delayExchangeName, "x-delayed-message", receiveSettings.Durable, receiveSettings.AutoDelete);

            sendSettings.SetExchangeArgument("x-delayed-type", receiveSettings.ExchangeType);

            sendSettings.BindToQueue(receiveSettings.QueueName);

            var modelContext = _context.ReceiveContext.GetPayload <ModelContext>();

            return(modelContext.ConnectionContext.HostSettings.GetSendAddress(sendSettings));
        }
        async Task MessageRedeliveryContext.ScheduleRedelivery(TimeSpan delay)
        {
            var receiveSettings = _context.ReceiveContext.GetPayload <ReceiveSettings>();

            string delayExchangeName = receiveSettings.QueueName + "_delay";
            var    sendSettings      = new RabbitMqSendSettings(delayExchangeName, "x-delayed-message", receiveSettings.Durable, receiveSettings.AutoDelete);

            sendSettings.SetExchangeArgument("x-delayed-type", receiveSettings.ExchangeType);

            sendSettings.BindToQueue(receiveSettings.QueueName);

            var modelContext = _context.ReceiveContext.GetPayload <ModelContext>();

            Uri delayExchangeAddress = modelContext.ConnectionContext.HostSettings.GetSendAddress(sendSettings);

            ISendEndpoint delayEndpoint = await _context.GetSendEndpoint(delayExchangeAddress);

            await delayEndpoint.Send(_context.Message, _context.CreateCopyContextPipe((x, y) => UpdateDeliveryContext(x, y, delay)));
        }
        /// <summary>
        /// Return the send settings for the address
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public static SendSettings GetSendSettings(this Uri address)
        {
            if (string.Compare("rabbitmq", address.Scheme, StringComparison.OrdinalIgnoreCase) != 0)
                throw new RabbitMqAddressException("The invalid scheme was specified: " + address.Scheme);

            string name = address.AbsolutePath.Substring(1);
            string[] pathSegments = name.Split('/');
            if (pathSegments.Length == 2)
                name = pathSegments[1];


            if (name == "*")
                throw new ArgumentException("Cannot send to a dynamic address");

            VerifyQueueOrExchangeNameIsLegal(name);

            bool isTemporary = address.Query.GetValueFromQueryString("temporary", false);

            bool durable = address.Query.GetValueFromQueryString("durable", !isTemporary);
            bool autoDelete = address.Query.GetValueFromQueryString("autodelete", isTemporary);

            string exchangeType = address.Query.GetValueFromQueryString("type") ?? ExchangeType.Fanout;

            var settings = new RabbitMqSendSettings(name, exchangeType, durable, autoDelete);

            bool bindToQueue = address.Query.GetValueFromQueryString("bind", false);
            if (bindToQueue)
            {
                string queueName = WebUtility.UrlDecode(address.Query.GetValueFromQueryString("queue"));
                settings.BindToQueue(queueName);
            }

            string delayedType = address.Query.GetValueFromQueryString("delayedType");
            if (!string.IsNullOrWhiteSpace(delayedType))
                settings.SetExchangeArgument("x-delayed-type", delayedType);

            string bindExchange = address.Query.GetValueFromQueryString("bindexchange");
            if (!string.IsNullOrWhiteSpace(bindExchange))
                settings.BindToExchange(bindExchange);

            return settings;
        }
        protected override Uri GetDeadLetterAddress()
        {
            string errorQueueName = _settings.QueueName + "_skipped";
            var sendSettings = new RabbitMqSendSettings(errorQueueName, RabbitMQ.Client.ExchangeType.Fanout, _settings.Durable,
                _settings.AutoDelete);

            sendSettings.BindToQueue(errorQueueName);

            return _host.Settings.GetSendAddress(sendSettings);
        }
        protected override Uri GetErrorAddress()
        {
            string errorQueueName = _settings.QueueName + "_error";
            var sendSettings = new RabbitMqSendSettings(errorQueueName, RabbitMQ.Client.ExchangeType.Fanout, true,
                false);

            sendSettings.BindToQueue(errorQueueName);

            return _host.Settings.GetSendAddress(sendSettings);
        }