public Uri GetDestinationAddress(string exchangeName, Action <IExchangeConfigurator> configure = null)
        {
            var sendSettings = new RabbitMqSendSettings(exchangeName, _exchangeTypeSelector.DefaultExchangeType, true, false);

            configure?.Invoke(sendSettings);

            return(sendSettings.GetSendAddress(_hostAddress));
        }
Beispiel #2
0
        public Uri GetSendAddress(string exchangeName, Action <IExchangeConfigurator> configure = null)
        {
            var sendSettings = new RabbitMqSendSettings(exchangeName, ExchangeType.Fanout, true, false);

            configure?.Invoke(sendSettings);

            return(sendSettings.GetSendAddress(_settings.HostAddress));
        }
        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 #4
0
        public Uri GetDestinationAddress(string exchangeName, Action <IExchangeConfigurator> configure = null)
        {
            var address = new RabbitMqEndpointAddress(_hostAddress, new Uri($"exchange:{exchangeName}"));

            var sendSettings = new RabbitMqSendSettings(address);

            configure?.Invoke(sendSettings);

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

            sendSettings.BindToQueue(errorQueueName);

            return(sendSettings.GetSendAddress(_host.Settings.HostAddress));
        }
Beispiel #6
0
        public Uri GetDelayedExchangeDestinationAddress(Uri address)
        {
            var endpointAddress = new RabbitMqEndpointAddress(_hostAddress, address);

            var delayedExchangeAddress = endpointAddress.GetDelayAddress();

            var settings = new RabbitMqSendSettings(delayedExchangeAddress);

            settings.BindToExchange(endpointAddress.Name);

            return(settings.GetSendAddress(_hostAddress));
        }
Beispiel #7
0
        public Uri GetDestinationAddress(Type messageType, Action <IExchangeConfigurator> configure = null)
        {
            var exchangeName = _messageNameFormatter.GetMessageName(messageType).ToString();
            var isTemporary  = TypeMetadataCache.IsTemporaryMessageType(messageType);
            var address      = new RabbitMqEndpointAddress(_hostAddress, new Uri($"exchange:{exchangeName}?temporary={isTemporary}"));

            var settings = new RabbitMqSendSettings(address);

            configure?.Invoke(settings);

            return(settings.GetSendAddress(_hostAddress));
        }
        public Uri GetDestinationAddress(Type messageType, Action <IExchangeConfigurator> configure = null)
        {
            var isTemporary = TypeMetadataCache.IsTemporaryMessageType(messageType);

            var durable    = !isTemporary;
            var autoDelete = isTemporary;

            var name = _messageNameFormatter.GetMessageName(messageType).ToString();

            var settings = new RabbitMqSendSettings(name, _exchangeTypeSelector.DefaultExchangeType, durable, autoDelete);

            configure?.Invoke(settings);

            return(settings.GetSendAddress(_hostAddress));
        }
Beispiel #9
0
        Task <ISendEndpoint> GetSchedulerEndpoint(Uri destinationAddress)
        {
            var destinationSettings = _topology.GetSendSettings(destinationAddress);

            var sendSettings = new RabbitMqSendSettings(destinationSettings.ExchangeName + "_delay", "x-delayed-message", destinationSettings.Durable,
                                                        destinationSettings.AutoDelete);

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

            sendSettings.BindToExchange(destinationSettings.ExchangeName);

            var delayExchangeAddress = sendSettings.GetSendAddress(_hostAddress);

            return(_sendEndpointProvider.GetSendEndpoint(delayExchangeAddress));
        }
Beispiel #10
0
        async Task <ScheduledMessage <T> > ScheduleSend <T>(Uri destinationAddress, DateTime scheduledTime, T message, IPipe <SendContext <T> > pipe, CancellationToken cancellationToken)
            where T : class
        {
            var destinationSettings = _topology.GetSendSettings(destinationAddress);

            var sendSettings = new RabbitMqSendSettings(destinationSettings.ExchangeName + "_delay", "x-delayed-message", destinationSettings.Durable,
                                                        destinationSettings.AutoDelete);

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

            sendSettings.BindToExchange(destinationSettings.ExchangeName);

            var delayExchangeAddress = sendSettings.GetSendAddress(_hostAddress);

            var delayEndpoint = await _sendEndpointProvider.GetSendEndpoint(delayExchangeAddress).ConfigureAwait(false);

            var messageId = NewId.NextGuid();

            IPipe <SendContext <T> > delayPipe = Pipe.ExecuteAsync <SendContext <T> >(async context =>
            {
                context.MessageId     = messageId;
                var rabbitSendContext = context.GetPayload <RabbitMqSendContext>();

                var delay = Math.Max(0,
                                     (scheduledTime.Kind == DateTimeKind.Local ? (scheduledTime - DateTime.Now) : (scheduledTime - DateTime.UtcNow)).TotalMilliseconds);

                if (delay > 0)
                {
                    rabbitSendContext.SetTransportHeader("x-delay", (long)delay);
                }

                await pipe.Send(context).ConfigureAwait(false);
            });

            await delayEndpoint.Send(message, delayPipe, cancellationToken).ConfigureAwait(false);

            return(new ScheduledMessageHandle <T>(messageId, scheduledTime, destinationAddress, message));
        }