public SqsQueueByName VerifyOrCreateQueue(string region, IMessageSerialisationRegister serialisationRegister, SqsConfiguration queueConfig) { var sqsclient = AWSClientFactory.CreateAmazonSQSClient(RegionEndpoint.GetBySystemName(region)); var snsclient = AWSClientFactory.CreateAmazonSimpleNotificationServiceClient(RegionEndpoint.GetBySystemName(region)); var queue = new SqsQueueByName(queueConfig.QueueName, sqsclient, queueConfig.RetryCountBeforeSendingToErrorQueue); var eventTopic = new SnsTopicByName(queueConfig.PublishEndpoint, snsclient, serialisationRegister); queue.EnsureQueueAndErrorQueueExistAndAllAttributesAreUpdated(queueConfig); if (!eventTopic.Exists()) { eventTopic.Create(); } if (!eventTopic.IsSubscribed(queue)) { eventTopic.Subscribe(queue); } if (!queue.HasPermission(eventTopic)) { queue.AddPermission(eventTopic); } return(queue); }
protected SnsTopicBase(IMessageSerialisationRegister serialisationRegister, ILoggerFactory loggerFactory, SnsWriteConfiguration snsWriteConfiguration) { _serialisationRegister = serialisationRegister; _log = loggerFactory.CreateLogger("JustSaying"); _eventLog = loggerFactory.CreateLogger("EventLog"); _snsWriteConfiguration = snsWriteConfiguration; }
protected SnsTopicBase(IMessageSerialisationRegister serialisationRegister, ILoggerFactory loggerFactory, IMessageSubjectProvider messageSubjectProvider) { _serialisationRegister = serialisationRegister; _messageSubjectProvider = messageSubjectProvider; _log = loggerFactory.CreateLogger("JustSaying"); _eventLog = loggerFactory.CreateLogger("EventLog"); }
public SqsQueueByName VerifyOrCreateQueue(string region, IMessageSerialisationRegister serialisationRegister, SqsConfiguration queueConfig) { var sqsclient = AWSClientFactory.CreateAmazonSQSClient(RegionEndpoint.GetBySystemName(region)); var snsclient = AWSClientFactory.CreateAmazonSimpleNotificationServiceClient(RegionEndpoint.GetBySystemName(region)); var queue = new SqsQueueByName(queueConfig.QueueName, sqsclient, queueConfig.RetryCountBeforeSendingToErrorQueue); var eventTopic = new SnsTopicByName(queueConfig.PublishEndpoint, snsclient, serialisationRegister); if (!queue.Exists()) queue.Create(queueConfig.MessageRetentionSeconds, 0, queueConfig.VisibilityTimeoutSeconds, queueConfig.ErrorQueueOptOut, queueConfig.RetryCountBeforeSendingToErrorQueue); //Create an error queue for existing queues if they don't already have one if(queue.ErrorQueue != null && !queue.ErrorQueue.Exists()) queue.ErrorQueue.Create(JustSayingConstants.MAXIMUM_RETENTION_PERIOD, JustSayingConstants.DEFAULT_CREATE_REATTEMPT, JustSayingConstants.DEFAULT_VISIBILITY_TIMEOUT, errorQueueOptOut: true); queue.UpdateRedrivePolicy(new RedrivePolicy(queueConfig.RetryCountBeforeSendingToErrorQueue, queue.ErrorQueue.Arn)); if (!eventTopic.Exists()) eventTopic.Create(); if (!eventTopic.IsSubscribed(queue)) eventTopic.Subscribe(queue); if (!queue.HasPermission(eventTopic)) queue.AddPermission(eventTopic); return queue; }
public SnsTopicByName(string topicName, IAmazonSimpleNotificationService client, IMessageSerialisationRegister serialisationRegister) : base(serialisationRegister) { TopicName = topicName; Client = client; Exists(); }
public SqsNotificationListener( SqsQueueBase queue, IMessageSerialisationRegister serialisationRegister, IMessageMonitor messagingMonitor, ILoggerFactory loggerFactory, Action <Exception, Amazon.SQS.Model.Message> onError = null, IMessageLockAsync messageLock = null, IMessageBackoffStrategy messageBackoffStrategy = null) { _queue = queue; _messagingMonitor = messagingMonitor; onError = onError ?? ((ex, message) => { }); _log = loggerFactory.CreateLogger("JustSaying"); _messageProcessingStrategy = new DefaultThrottledThroughput(_messagingMonitor); _messageHandlerWrapper = new MessageHandlerWrapper(messageLock, _messagingMonitor); _messageDispatcher = new MessageDispatcher(queue, serialisationRegister, messagingMonitor, onError, _handlerMap, loggerFactory, messageBackoffStrategy); Subscribers = new Collection <ISubscriber>(); if (messageBackoffStrategy != null) { _requestMessageAttributeNames.Add(MessageSystemAttributeName.ApproximateReceiveCount); } }
public SqsPublisher(RegionEndpoint region, string queueName, IAmazonSQS client, int retryCountBeforeSendingToErrorQueue, IMessageSerialisationRegister serialisationRegister, ILoggerFactory loggerFactory) : base(region, queueName, client, retryCountBeforeSendingToErrorQueue, loggerFactory) { _client = client; _serialisationRegister = serialisationRegister; }
public SqsQueueByName EnsureTopicExistsWithQueueSubscribed(string region, IMessageSerialisationRegister serialisationRegister, SqsReadConfiguration queueConfig) { var queue = EnsureQueueExists(region, queueConfig); var eventTopic = EnsureTopicExists(region, serialisationRegister, queueConfig); EnsureQueueIsSubscribedToTopic(region, eventTopic, queue); return queue; }
public SnsTopicByName(string topicName, IAmazonSimpleNotificationService client, IMessageSerialisationRegister serialisationRegister) : base(serialisationRegister) { _serialisationRegister = serialisationRegister; TopicName = topicName; Client = client; Exists(); }
public SqsQueueByName EnsureTopicExistsWithQueueSubscribed(string region, IMessageSerialisationRegister serialisationRegister, SqsReadConfiguration queueConfig) { var queue = EnsureQueueExists(region, queueConfig); var eventTopic = EnsureTopicExists(region, serialisationRegister, queueConfig); EnsureQueueIsSubscribedToTopic(region, eventTopic, queue); return(queue); }
public SnsTopicByName(string topicName, IAmazonSimpleNotificationService client, IMessageSerialisationRegister serialisationRegister, ILoggerFactory loggerFactory, SnsWriteConfiguration snsWriteConfiguration) : base(serialisationRegister, loggerFactory, snsWriteConfiguration) { TopicName = topicName; Client = client; _log = loggerFactory.CreateLogger("JustSaying"); }
public SqsNotificationListener(SqsQueueBase queue, IMessageSerialisationRegister serialisationRegister, IMessageMonitor messagingMonitor, Action <Exception, Amazon.SQS.Model.Message> onError = null, IMessageLock messageLock = null) { _queue = queue; _serialisationRegister = serialisationRegister; _messagingMonitor = messagingMonitor; _onError = onError ?? ((ex, message) => { }); _handlers = new Dictionary <Type, List <Func <Message, bool> > >(); _messageProcessingStrategy = new MaximumThroughput(); _messageLock = messageLock; }
private static SnsTopicByName EnsureTopicExists(string region, IMessageSerialisationRegister serialisationRegister, SqsReadConfiguration queueConfig) { var snsclient = AWSClientFactory.CreateAmazonSimpleNotificationServiceClient(RegionEndpoint.GetBySystemName(region)); var eventTopic = new SnsTopicByName(queueConfig.PublishEndpoint, snsclient, serialisationRegister); if (!eventTopic.Exists()) eventTopic.Create(); return eventTopic; }
public SqsQueueByName EnsureTopicExistsWithQueueSubscribed(string region, IMessageSerialisationRegister serialisationRegister, string queueName, string topic, int messageRetentionSeconds, int visibilityTimeoutSeconds = 30, int? instancePosition = null) { return EnsureTopicExistsWithQueueSubscribed(region, serialisationRegister, new SqsReadConfiguration(SubscriptionType.ToTopic) { QueueName = queueName, Topic = topic, MessageRetentionSeconds = messageRetentionSeconds, VisibilityTimeoutSeconds = visibilityTimeoutSeconds, InstancePosition = instancePosition }); }
public SqsQueueByName VerifyOrCreateQueue(string region, IMessageSerialisationRegister serialisationRegister, string queueName, string topic, int messageRetentionSeconds, int visibilityTimeoutSeconds = 30, int? instancePosition = null) { return VerifyOrCreateQueue(region, serialisationRegister, new SqsConfiguration { QueueName = queueName, Topic = topic, MessageRetentionSeconds = messageRetentionSeconds, VisibilityTimeoutSeconds = visibilityTimeoutSeconds, InstancePosition = instancePosition }); }
public SqsQueueByName VerifyOrCreateQueue(string region, IMessageSerialisationRegister serialisationRegister, string queueName, string topic, int messageRetentionSeconds, int visibilityTimeoutSeconds = 30, int?instancePosition = null) { return(VerifyOrCreateQueue(region, serialisationRegister, new SqsConfiguration { QueueName = queueName, Topic = topic, MessageRetentionSeconds = messageRetentionSeconds, VisibilityTimeoutSeconds = visibilityTimeoutSeconds, InstancePosition = instancePosition })); }
public SqsQueueByName EnsureTopicExistsWithQueueSubscribed(string region, IMessageSerialisationRegister serialisationRegister, string queueName, string topic, int messageRetentionSeconds, int visibilityTimeoutSeconds = 30, int?instancePosition = null) { return(EnsureTopicExistsWithQueueSubscribed(region, serialisationRegister, new SqsReadConfiguration(SubscriptionType.ToTopic) { QueueName = queueName, Topic = topic, MessageRetentionSeconds = messageRetentionSeconds, VisibilityTimeoutSeconds = visibilityTimeoutSeconds, InstancePosition = instancePosition })); }
private static SnsTopicByName EnsureTopicExists(string region, IMessageSerialisationRegister serialisationRegister, SqsReadConfiguration queueConfig) { var snsclient = AWSClientFactory.CreateAmazonSimpleNotificationServiceClient(RegionEndpoint.GetBySystemName(region)); var eventTopic = new SnsTopicByName(queueConfig.PublishEndpoint, snsclient, serialisationRegister); if (!eventTopic.Exists()) { eventTopic.Create(); } return(eventTopic); }
public SqsQueueByName EnsureTopicExistsWithQueueSubscribed(string region, IMessageSerialisationRegister serialisationRegister, SqsReadConfiguration queueConfig) { var regionEndpoint = RegionEndpoint.GetBySystemName(region); var queue = EnsureQueueExists(region, queueConfig); var eventTopic = EnsureTopicExists(regionEndpoint, serialisationRegister, queueConfig); EnsureQueueIsSubscribedToTopic(regionEndpoint, eventTopic, queue); var sqsclient = _awsClientFactory.GetAwsClientFactory().GetSqsClient(regionEndpoint); SqsPolicy.Save(eventTopic.Arn, queue.Arn, queue.Url, sqsclient); return(queue); }
public JustSayingBus(IMessagingConfig config, IMessageSerialisationRegister serialisationRegister, ILoggerFactory loggerFactory) { _log = loggerFactory.CreateLogger("JustSaying"); Config = config; Monitor = new NullOpMessageMonitor(); _subscribersByRegionAndQueue = new Dictionary <string, Dictionary <string, INotificationSubscriber> >(); _publishersByRegionAndTopic = new Dictionary <string, Dictionary <string, IMessagePublisher> >(); SerialisationRegister = serialisationRegister; _publishers = new HashSet <IPublisher>(); _subscribers = new HashSet <ISubscriber>(); }
public MessageDispatcher( SqsQueueBase queue, IMessageSerialisationRegister serialisationRegister, IMessageMonitor messagingMonitor, Action<Exception, SQSMessage> onError, HandlerMap handlerMap) { _queue = queue; _serialisationRegister = serialisationRegister; _messagingMonitor = messagingMonitor; _onError = onError; _handlerMap = handlerMap; }
public MessageDispatcher( SqsQueueBase queue, IMessageSerialisationRegister serialisationRegister, IMessageMonitor messagingMonitor, Action <Exception, SQSMessage> onError, HandlerMap handlerMap) { _queue = queue; _serialisationRegister = serialisationRegister; _messagingMonitor = messagingMonitor; _onError = onError; _handlerMap = handlerMap; }
public MessageDispatcher( SqsQueueBase queue, IMessageSerialisationRegister serialisationRegister, IMessageMonitor messagingMonitor, Action <Exception, SQSMessage> onError, HandlerMap handlerMap, ILoggerFactory loggerFactory) { _queue = queue; _serialisationRegister = serialisationRegister; _messagingMonitor = messagingMonitor; _onError = onError; _handlerMap = handlerMap; _log = loggerFactory.CreateLogger("JustSaying"); }
private SnsTopicByName EnsureTopicExists(RegionEndpoint region, IMessageSerialisationRegister serialisationRegister, SqsReadConfiguration queueConfig) { var snsclient = _awsClientFactory.GetAwsClientFactory().GetSnsClient(region); var eventTopic = _topicCache.TryGetFromCache(region.SystemName, queueConfig.PublishEndpoint); if (eventTopic != null) return eventTopic; eventTopic = new SnsTopicByName(queueConfig.PublishEndpoint, snsclient, serialisationRegister); _topicCache.AddToCache(region.SystemName, queueConfig.PublishEndpoint, eventTopic); if (!eventTopic.Exists()) eventTopic.Create(); return eventTopic; }
private static readonly Logger Log = LogManager.GetLogger("JustSaying"); //ToDo: danger! public JustSayingBus(IMessagingConfig config, IMessageSerialisationRegister serialisationRegister) { if (config.PublishFailureReAttempts == 0) { Log.Warn("You have not set a re-attempt value for publish failures. If the publish location is 'down' you may loose messages!"); } Log.Info(string.Format("Registering with stack.")); Config = config; Monitor = new NullOpMessageMonitor(); _notificationSubscribers = new Dictionary <string, INotificationSubscriber>(); _messagePublishers = new Dictionary <string, Dictionary <Type, IMessagePublisher> >(); SerialisationRegister = serialisationRegister; }
public SqsNotificationListener( SqsQueueBase queue, IMessageSerialisationRegister serialisationRegister, IMessageMonitor messagingMonitor, Action <Exception, Amazon.SQS.Model.Message> onError = null, IMessageLock messageLock = null) { _queue = queue; _messagingMonitor = messagingMonitor; onError = onError ?? ((ex, message) => { }); _messageProcessingStrategy = new DefaultThrottledThroughput(_messagingMonitor); _messageHandlerWrapper = new MessageHandlerWrapper(messageLock, _messagingMonitor); _messageDispatcher = new MessageDispatcher(queue, serialisationRegister, messagingMonitor, onError, _handlerMap); Subscribers = new Collection <ISubscriber>(); }
protected override void Given() { Sqs = Substitute.For <IAmazonSQS>(); Serialiser = Substitute.For <IMessageSerialiser>(); SerialisationRegister = Substitute.For <IMessageSerialisationRegister>(); Monitor = Substitute.For <IMessageMonitor>(); Handler = Substitute.For <IHandler <GenericMessage> >(); var response = GenerateResponseMessage(_messageTypeString, Guid.NewGuid()); Sqs.ReceiveMessage(Arg.Any <ReceiveMessageRequest>()).Returns(x => response, x => new ReceiveMessageResponse()); SerialisationRegister.GeTypeSerialiser(_messageTypeString).Returns(new TypeSerialiser(typeof(GenericMessage), Serialiser)); DeserialisedMessage = new GenericMessage { RaisingComponent = "Component" }; Serialiser.Deserialise(Arg.Any <string>(), typeof(GenericMessage)).Returns(x => DeserialisedMessage); }
protected override void Given() { Sqs = Substitute.For <IAmazonSQS>(); SerialisationRegister = Substitute.For <IMessageSerialisationRegister>(); Monitor = Substitute.For <IMessageMonitor>(); Handler = Substitute.For <IHandler <GenericMessage> >(); var response = GenerateResponseMessage(_messageTypeString, Guid.NewGuid()); Sqs.ReceiveMessageAsync( Arg.Any <ReceiveMessageRequest>(), Arg.Any <CancellationToken>()) .Returns( x => Task.FromResult(response), x => Task.FromResult(new ReceiveMessageResponse())); DeserialisedMessage = new GenericMessage { RaisingComponent = "Component" }; SerialisationRegister.DeserializeMessage(Arg.Any <string>()).Returns(DeserialisedMessage); }
private SnsTopicByName EnsureTopicExists(RegionEndpoint region, IMessageSerialisationRegister serialisationRegister, SqsReadConfiguration queueConfig) { var snsclient = _awsClientFactory.GetAwsClientFactory().GetSnsClient(region); var eventTopic = _topicCache.TryGetFromCache(region.SystemName, queueConfig.PublishEndpoint); if (eventTopic != null) { return(eventTopic); } eventTopic = new SnsTopicByName(queueConfig.PublishEndpoint, snsclient, serialisationRegister); _topicCache.AddToCache(region.SystemName, queueConfig.PublishEndpoint, eventTopic); if (!eventTopic.Exists()) { eventTopic.Create(); } return(eventTopic); }
public SqsQueueByName EnsureTopicExistsWithQueueSubscribed(string region, IMessageSerialisationRegister serialisationRegister, SqsReadConfiguration queueConfig) { var regionEndpoint = RegionEndpoint.GetBySystemName(region); var queue = EnsureQueueExists(region, queueConfig); if (TopicExistsInAnotherAccount(queueConfig)) { var sqsClient = _awsClientFactory.GetAwsClientFactory().GetSqsClient(regionEndpoint); var snsClient = _awsClientFactory.GetAwsClientFactory().GetSnsClient(regionEndpoint); var arnProvider = new ForeignTopicArnProvider(regionEndpoint, queueConfig.TopicSourceAccount, queueConfig.PublishEndpoint); snsClient.SubscribeQueue(arnProvider.GetArn(), sqsClient, queue.Url); } else { var eventTopic = EnsureTopicExists(regionEndpoint, serialisationRegister, queueConfig); EnsureQueueIsSubscribedToTopic(regionEndpoint, eventTopic, queue); var sqsclient = _awsClientFactory.GetAwsClientFactory().GetSqsClient(regionEndpoint); SqsPolicy.Save(eventTopic.Arn, queue.Arn, queue.Url, sqsclient); } return queue; }
public SqsQueueByName EnsureTopicExistsWithQueueSubscribed(string region, IMessageSerialisationRegister serialisationRegister, SqsReadConfiguration queueConfig) { var regionEndpoint = RegionEndpoint.GetBySystemName(region); var queue = EnsureQueueExists(region, queueConfig); if (TopicExistsInAnotherAccount(queueConfig)) { var sqsClient = _awsClientFactory.GetAwsClientFactory().GetSqsClient(regionEndpoint); var snsClient = _awsClientFactory.GetAwsClientFactory().GetSnsClient(regionEndpoint); var arnProvider = new ForeignTopicArnProvider(regionEndpoint, queueConfig.TopicSourceAccount, queueConfig.PublishEndpoint); snsClient.SubscribeQueue(arnProvider.GetArn(), sqsClient, queue.Url); } else { var eventTopic = EnsureTopicExists(regionEndpoint, serialisationRegister, queueConfig); EnsureQueueIsSubscribedToTopic(regionEndpoint, eventTopic, queue); var sqsclient = _awsClientFactory.GetAwsClientFactory().GetSqsClient(regionEndpoint); SqsPolicy.Save(eventTopic.Arn, queue.Arn, queue.Url, sqsclient); } return(queue); }
public SnsTopicByArn(string topicArn, IAmazonSimpleNotificationService client, IMessageSerialisationRegister serialisationRegister) : base(serialisationRegister) { Arn = topicArn; Client = client; }
public SqsPublisher(string queueName, IAmazonSQS client, int retryCountBeforeSendingToErrorQueue, IMessageSerialisationRegister serialisationRegister) : base(queueName, client, retryCountBeforeSendingToErrorQueue) { _client = client; _serialisationRegister = serialisationRegister; }
public SnsTopicByArn(string topicArn, IAmazonSimpleNotificationService client, IMessageSerialisationRegister serialisationRegister) : base(serialisationRegister) { Arn = topicArn; Client = client; }
private readonly IMessageSerialisationRegister _serialisationRegister; // ToDo: Grrr...why is this here even. GET OUT! #endregion Fields #region Constructors public SnsTopicBase(IMessageSerialisationRegister serialisationRegister) { _serialisationRegister = serialisationRegister; }
public SnsTopicBase(IMessageSerialisationRegister serialisationRegister) { _serialisationRegister = serialisationRegister; }
public SqsPublisher(RegionEndpoint region, string queueName, IAmazonSQS client, int retryCountBeforeSendingToErrorQueue, IMessageSerialisationRegister serialisationRegister) : base(region, queueName, client, retryCountBeforeSendingToErrorQueue) { _client = client; _serialisationRegister = serialisationRegister; }
public SqsQueueByName EnsureTopicExistsWithQueueSubscribed(string region, IMessageSerialisationRegister serialisationRegister, SqsReadConfiguration queueConfig) { return(EnsureTopicExistsWithQueueSubscribedAsync(region, serialisationRegister, queueConfig) .GetAwaiter().GetResult()); }
public async Task <SqsQueueByName> EnsureTopicExistsWithQueueSubscribedAsync(string region, IMessageSerialisationRegister serialisationRegister, SqsReadConfiguration queueConfig) { var regionEndpoint = RegionEndpoint.GetBySystemName(region); var sqsClient = _awsClientFactory.GetAwsClientFactory().GetSqsClient(regionEndpoint); var snsClient = _awsClientFactory.GetAwsClientFactory().GetSnsClient(regionEndpoint); var queue = await EnsureQueueExistsAsync(region, queueConfig).ConfigureAwait(false); if (TopicExistsInAnotherAccount(queueConfig)) { var arnProvider = new ForeignTopicArnProvider(regionEndpoint, queueConfig.TopicSourceAccount, queueConfig.PublishEndpoint); await snsClient.SubscribeQueueAsync(arnProvider.GetArn(), sqsClient, queue.Url).ConfigureAwait(false); } else { var eventTopic = new SnsTopicByName(queueConfig.PublishEndpoint, snsClient, serialisationRegister, _loggerFactory); eventTopic.Create(); await EnsureQueueIsSubscribedToTopic(eventTopic, queue).ConfigureAwait(false); await SqsPolicy.SaveAsync(eventTopic.Arn, queue.Arn, queue.Url, sqsClient).ConfigureAwait(false); } return(queue); }
public SnsTopicByName(string topicName, IAmazonSimpleNotificationService client, IMessageSerialisationRegister serialisationRegister, ILoggerFactory loggerFactory, IMessageSubjectProvider messageSubjectProvider) : base(serialisationRegister, loggerFactory, messageSubjectProvider) { TopicName = topicName; Client = client; _log = loggerFactory.CreateLogger("JustSaying"); }