Ejemplo n.º 1
0
        public Task <ISendTransport> CreateSendTransport(IClientContextSupervisor clientContextSupervisor, Uri address)
        {
            LogContext.SetCurrentIfNull(_hostConfiguration.LogContext);

            var endpointAddress = new AmazonSqsEndpointAddress(_hostConfiguration.HostAddress, address);

            TransportLogMessages.CreateSendTransport(endpointAddress);

            if (endpointAddress.Type == AmazonSqsEndpointAddress.AddressType.Queue)
            {
                var settings = _topologyConfiguration.Send.GetSendSettings(endpointAddress);

                IPipe <ClientContext> configureTopology = new ConfigureTopologyFilter <EntitySettings>(settings, settings.GetBrokerTopology()).ToPipe();

                return(CreateTransport(clientContextSupervisor, configureTopology, settings.EntityName, x => new QueueSendTransport(x)));
            }
            else
            {
                var settings = new TopicPublishSettings(endpointAddress);

                var builder     = new PublishEndpointBrokerTopologyBuilder();
                var topicHandle = builder.CreateTopic(settings.EntityName, settings.Durable, settings.AutoDelete, settings.TopicAttributes, settings
                                                      .TopicSubscriptionAttributes, settings.Tags);

                builder.Topic ??= topicHandle;

                IPipe <ClientContext> configureTopology = new ConfigureTopologyFilter <EntitySettings>(settings, builder.BuildBrokerTopology()).ToPipe();

                return(CreateTransport(clientContextSupervisor, configureTopology, settings.EntityName, x => new TopicSendTransport(x)));
            }
        }
Ejemplo n.º 2
0
        public Uri GetDestinationAddress(string topicName, Action <ITopicConfigurator> configure = null)
        {
            var sendSettings = new TopicPublishSettings(topicName, true, false);

            configure?.Invoke(sendSettings);

            return(sendSettings.GetSendAddress(_hostAddress));
        }
Ejemplo n.º 3
0
        public Uri GetDestinationAddress(string topicName, Action <ITopicConfigurator> configure = null)
        {
            var address = new AmazonSqsEndpointAddress(_hostConfiguration.HostAddress, new Uri($"topic:{topicName}"));

            var publishSettings = new TopicPublishSettings(address);

            configure?.Invoke(publishSettings);

            return(publishSettings.GetSendAddress(_hostConfiguration.HostAddress));
        }
Ejemplo n.º 4
0
        public Uri GetDestinationAddress(Type messageType, Action <ITopicConfigurator> configure = null)
        {
            var topicName   = _messageNameFormatter.GetMessageName(messageType).ToString();
            var isTemporary = TypeMetadataCache.IsTemporaryMessageType(messageType);
            var address     = new AmazonSqsEndpointAddress(_hostConfiguration.HostAddress, new Uri($"topic:{topicName}?temporary={isTemporary}"));

            var publishSettings = new TopicPublishSettings(address);

            configure?.Invoke(publishSettings);

            return(publishSettings.GetSendAddress(_hostConfiguration.HostAddress));
        }
Ejemplo n.º 5
0
        public Uri GetDestinationAddress(Type messageType, Action <ITopicConfigurator> configure = null)
        {
            var isTemporary = TypeMetadataCache.IsTemporaryMessageType(messageType);

            var durable    = !isTemporary;
            var autoDelete = isTemporary;

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

            var settings = new TopicPublishSettings(name, durable, autoDelete);

            configure?.Invoke(settings);

            return(settings.GetSendAddress(_hostAddress));
        }
        Task <ISendTransport> ISendTransportProvider.GetSendTransport(Uri address)
        {
            var endpointAddress = new AmazonSqsEndpointAddress(_hostConfiguration.HostAddress, address);

            LogContext.SetCurrentIfNull(_hostConfiguration.LogContext);

            TransportLogMessages.CreateSendTransport(endpointAddress);

            if (endpointAddress.Type == AmazonSqsEndpointAddress.AddressType.Queue)
            {
                var settings = _topologyConfiguration.Send.GetSendSettings(endpointAddress);

                var clientContextSupervisor = new ClientContextSupervisor(this);

                IPipe <ClientContext> configureTopologyPipe = new ConfigureTopologyFilter <SendSettings>(settings, settings.GetBrokerTopology()).ToPipe();

                var transportContext = new SendTransportContext(clientContextSupervisor, configureTopologyPipe, settings.EntityName,
                                                                _hostConfiguration.SendLogContext, _hostConfiguration.Settings.AllowTransportHeader);

                var transport = new QueueSendTransport(transportContext);
                Add(transport);

                return(Task.FromResult <ISendTransport>(transport));
            }
            else
            {
                var settings = new TopicPublishSettings(endpointAddress);

                var clientContextSupervisor = new ClientContextSupervisor(this);

                var builder     = new PublishEndpointBrokerTopologyBuilder();
                var topicHandle = builder.CreateTopic(settings.EntityName, settings.Durable, settings.AutoDelete, settings.TopicAttributes, settings
                                                      .TopicSubscriptionAttributes, settings.Tags);

                builder.Topic ??= topicHandle;

                IPipe <ClientContext> configureTopologyPipe = new ConfigureTopologyFilter <PublishSettings>(settings, builder.BuildBrokerTopology()).ToPipe();

                var transportContext = new SendTransportContext(clientContextSupervisor, configureTopologyPipe, settings.EntityName,
                                                                _hostConfiguration.SendLogContext, _hostConfiguration.Settings.AllowTransportHeader);

                var transport = new TopicSendTransport(transportContext);
                Add(transport);

                return(Task.FromResult <ISendTransport>(transport));
            }
        }
Ejemplo n.º 7
0
        public Task <ISendTransport> CreateSendTransport(AmazonSqsEndpointAddress address)
        {
            TransportLogMessages.CreateSendTransport(address);

            if (address.Type == AmazonSqsEndpointAddress.AddressType.Queue)
            {
                var settings = _hostTopology.SendTopology.GetSendSettings(address);

                var clientContextSupervisor = new AmazonSqsClientContextSupervisor(ConnectionContextSupervisor);

                var configureTopologyPipe = new ConfigureTopologyFilter <SendSettings>(settings, settings.GetBrokerTopology()).ToPipe();

                var transportContext = new HostSqsSendTransportContext(clientContextSupervisor, configureTopologyPipe, settings.EntityName, SendLogContext,
                                                                       _hostConfiguration.Settings.AllowTransportHeader);

                var transport = new QueueSendTransport(transportContext);
                Add(transport);

                return(Task.FromResult <ISendTransport>(transport));
            }
            else
            {
                var settings = new TopicPublishSettings(address);

                var clientContextSupervisor = new AmazonSqsClientContextSupervisor(ConnectionContextSupervisor);

                var builder     = new PublishEndpointBrokerTopologyBuilder();
                var topicHandle = builder.CreateTopic(settings.EntityName, settings.Durable, settings.AutoDelete, settings.TopicAttributes, settings
                                                      .TopicSubscriptionAttributes, settings.Tags);

                builder.Topic ??= topicHandle;

                var configureTopologyPipe = new ConfigureTopologyFilter <PublishSettings>(settings, builder.BuildBrokerTopology()).ToPipe();

                var transportContext = new HostSqsSendTransportContext(clientContextSupervisor, configureTopologyPipe, settings.EntityName, SendLogContext,
                                                                       _hostConfiguration.Settings.AllowTransportHeader);

                var transport = new TopicSendTransport(transportContext);
                Add(transport);

                return(Task.FromResult <ISendTransport>(transport));
            }
        }