/// <summary> /// Configures the specified <see cref="SnsWriteConfiguration"/>. /// </summary> /// <param name="config">The configuration to configure.</param> internal void Configure(SnsWriteConfiguration config) { if (Handler != null) { config.HandleException = Handler; } }
private IHaveFulfilledPublishRequirements AddSnsMessagePublisher <T>(Action <SnsWriteConfiguration> configBuilder) where T : Message { _log.LogInformation("Adding SNS publisher"); var snsWriteConfig = new SnsWriteConfiguration(); configBuilder?.Invoke(snsWriteConfig); _subscriptionConfig.Topic = GetMessageTypeName <T>(); var namingStrategy = GetNamingStrategy(); Bus.SerialisationRegister.AddSerialiser <T>(_serialisationFactory.GetSerialiser <T>()); var topicName = namingStrategy.GetTopicName(_subscriptionConfig.BaseTopicName, GetMessageTypeName <T>()); foreach (var region in Bus.Config.Regions) { // TODO pass region down into topic creation for when we have foreign topics so we can generate the arn var eventPublisher = new SnsTopicByName( topicName, _awsClientFactoryProxy.GetAwsClientFactory().GetSnsClient(RegionEndpoint.GetBySystemName(region)), Bus.SerialisationRegister, _loggerFactory, snsWriteConfig); eventPublisher.Create(); eventPublisher.EnsurePolicyIsUpdated(Bus.Config.AdditionalSubscriberAccounts); Bus.AddMessagePublisher <T>(eventPublisher, region); } _log.LogInformation($"Created SNS topic publisher - Topic: {_subscriptionConfig.Topic}"); return(this); }
/// <inheritdoc /> void IPublicationBuilder <T> .Configure( JustSayingBus bus, IAwsClientFactoryProxy proxy, ILoggerFactory loggerFactory) { var logger = loggerFactory.CreateLogger <TopicPublicationBuilder <T> >(); logger.LogInformation("Adding SNS publisher for message type '{MessageType}'.", typeof(T)); var config = bus.Config; var readConfiguration = new SqsReadConfiguration(SubscriptionType.ToTopic); var writeConfiguration = new SnsWriteConfiguration(); ConfigureWrites?.Invoke(writeConfiguration); readConfiguration.ApplyTopicNamingConvention <T>(config.TopicNamingConvention); bus.SerializationRegister.AddSerializer <T>(); foreach (var region in config.Regions) { // TODO pass region down into topic creation for when we have foreign topics so we can generate the arn var eventPublisher = new SnsTopicByName( readConfiguration.TopicName, proxy.GetAwsClientFactory().GetSnsClient(RegionEndpoint.GetBySystemName(region)), bus.SerializationRegister, loggerFactory, writeConfiguration, config.MessageSubjectProvider) { MessageResponseLogger = config.MessageResponseLogger }; async Task StartupTask() { if (writeConfiguration.Encryption != null) { await eventPublisher.CreateWithEncryptionAsync(writeConfiguration.Encryption) .ConfigureAwait(false); } else { await eventPublisher.CreateAsync().ConfigureAwait(false); } await eventPublisher.EnsurePolicyIsUpdatedAsync(config.AdditionalSubscriberAccounts) .ConfigureAwait(false); } bus.AddStartupTask(StartupTask()); bus.AddMessagePublisher <T>(eventPublisher, region); } logger.LogInformation( "Created SNS topic publisher on topic '{TopicName}' for message type '{MessageType}'.", readConfiguration.TopicName, typeof(T)); }
protected SnsTopicBase(IMessageSerialisationRegister serialisationRegister, ILoggerFactory loggerFactory, SnsWriteConfiguration snsWriteConfiguration) { _serialisationRegister = serialisationRegister; _log = loggerFactory.CreateLogger("JustSaying"); _eventLog = loggerFactory.CreateLogger("EventLog"); _snsWriteConfiguration = snsWriteConfiguration; }
public SnsTopicByName(string topicName, IAmazonSimpleNotificationService client, IMessageSerialisationRegister serialisationRegister, ILoggerFactory loggerFactory, SnsWriteConfiguration snsWriteConfiguration) : base(serialisationRegister, loggerFactory, snsWriteConfiguration) { TopicName = topicName; Client = client; _log = loggerFactory.CreateLogger("JustSaying"); }
protected SnsTopicBase( IMessageSerializationRegister serializationRegister, ILoggerFactory loggerFactory, SnsWriteConfiguration snsWriteConfiguration, IMessageSubjectProvider messageSubjectProvider) { _serializationRegister = serializationRegister; _logger = loggerFactory.CreateLogger("JustSaying"); _snsWriteConfiguration = snsWriteConfiguration; _messageSubjectProvider = messageSubjectProvider; }
private static void CreatePublisher(SnsTopicByName eventPublisher, SnsWriteConfiguration snsWriteConfig) { if (snsWriteConfig.Encryption != null) { eventPublisher.CreateWithEncryptionAsync(snsWriteConfig.Encryption).GetAwaiter().GetResult(); } else { eventPublisher.CreateAsync().GetAwaiter().GetResult(); } }
private IHaveFulfilledPublishRequirements AddSnsMessagePublisher <T>(Action <SnsWriteConfiguration> configBuilder) where T : Message { _log.LogInformation("Adding SNS publisher for message type '{MessageType}'.", typeof(T)); var snsWriteConfig = new SnsWriteConfiguration(); configBuilder?.Invoke(snsWriteConfig); _subscriptionConfig.Topic = typeof(T).ToTopicName(); var namingStrategy = GetNamingStrategy(); Bus.SerializationRegister.AddSerializer <T>(_serializationFactory.GetSerializer <T>()); var topicName = namingStrategy.GetTopicName(_subscriptionConfig.BaseTopicName, typeof(T)); foreach (var region in Bus.Config.Regions) { // TODO pass region down into topic creation for when we have foreign topics so we can generate the arn var eventPublisher = new SnsTopicByName( topicName, _awsClientFactoryProxy.GetAwsClientFactory().GetSnsClient(RegionEndpoint.GetBySystemName(region)), Bus.SerializationRegister, _loggerFactory, snsWriteConfig, Bus.Config.MessageSubjectProvider) { MessageResponseLogger = Bus.Config.MessageResponseLogger }; eventPublisher.CreateAsync().GetAwaiter().GetResult(); eventPublisher.EnsurePolicyIsUpdatedAsync(Bus.Config.AdditionalSubscriberAccounts).GetAwaiter().GetResult(); Bus.AddMessagePublisher <T>(eventPublisher, region); } _log.LogInformation("Created SNS topic publisher on topic '{TopicName}' for message type '{MessageType}'.", _subscriptionConfig.Topic, typeof(T)); return(this); }