/// <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; }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
public virtual IPublishEndpointProvider CreatePublisherEndpointProvider(SqsWriteConfiguration subscriptionConfig) { return(new SqsPublishEndpointProvider(subscriptionConfig.QueueName)); }