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