コード例 #1
0
        /// <summary>
        /// Register for publishing messages to SQS
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public IHaveFulfilledPublishRequirements WithSqsMessagePublisher<T>(Action<SqsWriteConfiguration> configBuilder) where T : Message
        {
            Log.Info("Adding SQS publisher");

            var config = new SqsWriteConfiguration();
            configBuilder(config);

            var messageTypeName = typeof(T).Name.ToLower();
            var queueName = string.IsNullOrWhiteSpace(config.QueueName)
                ? messageTypeName
                : messageTypeName + "-" + config.QueueName;
            _publishConfig.QueueName = queueName;

            var publishEndpointProvider = CreatePublisherEndpointProvider(_publishConfig);
            var locationName = publishEndpointProvider.GetLocationName();

            var eventPublisher = new SqsPublisher(
                locationName,
                AWSClientFactory.CreateAmazonSQSClient(RegionEndpoint.GetBySystemName(Bus.Config.Region)),
                config.RetryCountBeforeSendingToErrorQueue,
                Bus.SerialisationRegister);

            if (!eventPublisher.Exists())
                eventPublisher.Create(config);

            Bus.SerialisationRegister.AddSerialiser<T>(_serialisationFactory.GetSerialiser<T>());

            Bus.AddMessagePublisher<T>(eventPublisher);

            Log.Info(string.Format("Created SQS publisher - MessageName: {0}, QueueName: {1}", messageTypeName, locationName));

            return this;
        }
コード例 #2
0
        /// <inheritdoc />
        void IPublicationBuilder <T> .Configure(
            JustSayingBus bus,
            IAwsClientFactoryProxy proxy,
            ILoggerFactory loggerFactory)
        {
            var logger = loggerFactory.CreateLogger <QueuePublicationBuilder <T> >();

            logger.LogInformation("Adding SQS publisher for message type '{MessageType}'.",
                                  typeof(T));

            var config = bus.Config;
            var region = config.Region ?? throw new InvalidOperationException($"Config cannot have a blank entry for the {nameof(config.Region)} property.");

            var writeConfiguration = new SqsWriteConfiguration();

            ConfigureWrites?.Invoke(writeConfiguration);
            writeConfiguration.ApplyQueueNamingConvention <T>(config.QueueNamingConvention);

            bus.SerializationRegister.AddSerializer <T>();

            var regionEndpoint = RegionEndpoint.GetBySystemName(region);
            var sqsClient      = proxy.GetAwsClientFactory().GetSqsClient(regionEndpoint);

            var eventPublisher = new SqsMessagePublisher(
                sqsClient,
                bus.SerializationRegister,
                loggerFactory)
            {
                MessageResponseLogger = config.MessageResponseLogger
            };

#pragma warning disable 618
            var sqsQueue = new SqsQueueByName(
                regionEndpoint,
                writeConfiguration.QueueName,
                sqsClient,
                writeConfiguration.RetryCountBeforeSendingToErrorQueue,
                loggerFactory);
#pragma warning restore 618

            async Task StartupTask(CancellationToken cancellationToken)
            {
                if (!await sqsQueue.ExistsAsync(cancellationToken).ConfigureAwait(false))
                {
                    await sqsQueue.CreateAsync(writeConfiguration, cancellationToken : cancellationToken).ConfigureAwait(false);
                }

                eventPublisher.QueueUrl = sqsQueue.Uri;
            }

            bus.AddStartupTask(StartupTask);

            bus.AddMessagePublisher <T>(eventPublisher);

            logger.LogInformation(
                "Created SQS publisher for message type '{MessageType}' on queue '{QueueName}'.",
                typeof(T),
                writeConfiguration.QueueName);
        }
コード例 #3
0
        /// <inheritdoc />
        void IPublicationBuilder <T> .Configure(
            JustSayingBus bus,
            IAwsClientFactoryProxy proxy,
            ILoggerFactory loggerFactory)
        {
            var logger = loggerFactory.CreateLogger <QueuePublicationBuilder <T> >();

            logger.LogInformation("Adding SQS publisher for message type '{MessageType}'.",
                                  typeof(T));

            var config = bus.Config;

            var writeConfiguration = new SqsWriteConfiguration();

            ConfigureWrites?.Invoke(writeConfiguration);
            writeConfiguration.ApplyQueueNamingConvention <T>(config.QueueNamingConvention);

            bus.SerializationRegister.AddSerializer <T>();

            var regionEndpoint = RegionEndpoint.GetBySystemName(config.Region);
            var sqsClient      = proxy.GetAwsClientFactory().GetSqsClient(regionEndpoint);

#pragma warning disable 618
            var eventPublisher = new SqsPublisher(
                regionEndpoint,
                writeConfiguration.QueueName,
                sqsClient,
                writeConfiguration.RetryCountBeforeSendingToErrorQueue,
                bus.SerializationRegister,
                loggerFactory)
            {
                MessageResponseLogger = config.MessageResponseLogger
            };
#pragma warning restore 618

            async Task StartupTask()
            {
                if (!await eventPublisher.ExistsAsync().ConfigureAwait(false))
                {
                    await eventPublisher.CreateAsync(writeConfiguration).ConfigureAwait(false);
                }
            }

            bus.AddStartupTask(StartupTask);

            bus.AddMessagePublisher <T>(eventPublisher);

            logger.LogInformation(
                "Created SQS publisher for message type '{MessageType}' on queue '{QueueName}'.",
                typeof(T),
                writeConfiguration.QueueName);
        }
コード例 #4
0
        /// <summary>
        /// Register for publishing messages to SQS
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public IHaveFulfilledPublishRequirements WithSqsMessagePublisher <T>(Action <SqsWriteConfiguration> configBuilder) where T : Message
        {
            _log.LogInformation("Adding SQS publisher for message type '{MessageType}'.",
                                typeof(T));

            var config = new SqsWriteConfiguration();

            configBuilder?.Invoke(config);

            var queueName = GetNamingStrategy().GetQueueName(new SqsReadConfiguration(SubscriptionType.PointToPoint)
            {
                BaseQueueName = config.QueueName
            }, typeof(T));

            Bus.SerializationRegister.AddSerializer <T>(_serializationFactory.GetSerializer <T>());

            foreach (var region in Bus.Config.Regions)
            {
                var regionEndpoint = RegionEndpoint.GetBySystemName(region);
                var sqsClient      = _awsClientFactoryProxy.GetAwsClientFactory().GetSqsClient(regionEndpoint);

                var eventPublisher = new SqsPublisher(
                    regionEndpoint,
                    queueName,
                    sqsClient,
                    config.RetryCountBeforeSendingToErrorQueue,
                    Bus.SerializationRegister,
                    _loggerFactory)
                {
                    MessageResponseLogger = Bus.Config.MessageResponseLogger
                };

                if (!eventPublisher.ExistsAsync().GetAwaiter().GetResult())
                {
                    eventPublisher.CreateAsync(config).GetAwaiter().GetResult();
                }

                Bus.AddMessagePublisher <T>(eventPublisher, region);
            }

            _log.LogInformation(
                "Created SQS publisher for message type '{MessageType}' on queue '{QueueName}'.",
                typeof(T),
                queueName);

            return(this);
        }
コード例 #5
0
        /// <summary>
        /// Register for publishing messages to SQS
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public IHaveFulfilledPublishRequirements WithSqsMessagePublisher <T>(Action <SqsWriteConfiguration> configBuilder) where T : Message
        {
            _log.LogInformation("Adding SQS publisher");

            var config = new SqsWriteConfiguration();

            configBuilder(config);

            var messageTypeName = typeof(T).ToTopicName();
            var queueName       = GetNamingStrategy().GetQueueName(new SqsReadConfiguration(SubscriptionType.PointToPoint)
            {
                BaseQueueName = config.QueueName
            }, messageTypeName);

            Bus.SerialisationRegister.AddSerialiser <T>(_serialisationFactory.GetSerialiser <T>());

            foreach (var region in Bus.Config.Regions)
            {
                var regionEndpoint = RegionEndpoint.GetBySystemName(region);
                var eventPublisher = new SqsPublisher(
                    regionEndpoint,
                    queueName,
                    _awsClientFactoryProxy.GetAwsClientFactory().GetSqsClient(regionEndpoint),
                    config.RetryCountBeforeSendingToErrorQueue,
                    Bus.SerialisationRegister,
                    _loggerFactory);

                if (!eventPublisher.Exists())
                {
                    eventPublisher.Create(config);
                }

                Bus.AddMessagePublisher <T>(eventPublisher, region);
            }

            _log.LogInformation($"Created SQS publisher - MessageName: {messageTypeName}, QueueName: {queueName}");

            return(this);
        }
コード例 #6
0
 public virtual IPublishEndpointProvider CreatePublisherEndpointProvider(SqsWriteConfiguration subscriptionConfig)
 {
     return(new SqsPublishEndpointProvider(subscriptionConfig.QueueName));
 }