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; }
private void EnsureQueueExists(SqsQueueByName queue) { if (!queue.Exists()) { throw new InvalidOperationException($"{queue.QueueName} does not exist."); } }
public void IncorrectQueueNameDoNotMatch() { var sqsQueueByName = new SqsQueueByName("some-queue-name1", _client, RetryCount); Assert.IsFalse(sqsQueueByName.Exists()); }
public void CorrectQueueNameShouldMatch() { var sqsQueueByName = new SqsQueueByName("some-queue-name", _client, RetryCount); Assert.IsTrue(sqsQueueByName.Exists()); }
public void IncorrectPartialQueueNameDoNotMatch() { var sqsQueueByName = new SqsQueueByName(RegionEndpoint.EUWest1, "some-queue", _client, RetryCount); Assert.IsFalse(sqsQueueByName.Exists()); }
private void AssertThatQueueDoesNotExist(string name) { var sqsQueueByName = new SqsQueueByName(RegionEndpoint.EUWest1, name, _client, 1, new LoggerFactory()); Assert.IsFalse(sqsQueueByName.Exists(), $"Expecting queue '{name}' to not exist but it does."); }
// Use this to manually test the performance / throttling of getting messages out of the queue. public void HandlingManyMessages(int throttleMessageCount) { var locker = new object(); var awsQueueClient = CreateMeABus.DefaultClientFactory().GetSqsClient(RegionEndpoint.EUWest1); var q = new SqsQueueByName(RegionEndpoint.EUWest1, "throttle_test", awsQueueClient, 1); if (!q.Exists()) { q.Create(new SqsBasicConfiguration()); Thread.Sleep(TimeSpan.FromMinutes(1)); // wait 60 secs for queue creation to be guaranteed completed by aws. :( } Assert.True(q.Exists()); Console.WriteLine("{0} - Adding {1} messages to the queue.", DateTime.Now, throttleMessageCount); var entriesAdded = 0; // Add some messages do { var entries = new List <SendMessageBatchRequestEntry>(); for (var j = 0; j < 10; j++) { var batchEntry = new SendMessageBatchRequestEntry { MessageBody = "{\"Subject\":\"GenericMessage\", \"Message\": \"" + entriesAdded.ToString() + "\"}", Id = Guid.NewGuid().ToString() }; entries.Add(batchEntry); entriesAdded++; } awsQueueClient.SendMessageBatch(new SendMessageBatchRequest { QueueUrl = q.Url, Entries = entries }); }while (entriesAdded < throttleMessageCount); Console.WriteLine("{0} - Done adding messages.", DateTime.Now); var handleCount = 0; var serialisations = Substitute.For <IMessageSerialisationRegister>(); var monitor = Substitute.For <IMessageMonitor>(); var handler = Substitute.For <IHandler <GenericMessage> >(); handler.Handle(null).ReturnsForAnyArgs(true).AndDoes(x => { lock (locker) { handleCount++; } }); serialisations.DeserializeMessage(string.Empty).ReturnsForAnyArgs(new GenericMessage()); var listener = new SqsNotificationListener(q, serialisations, monitor); listener.AddMessageHandler(() => handler); var stopwatch = new Stopwatch(); stopwatch.Start(); listener.Listen(); var waitCount = 0; do { Thread.Sleep(TimeSpan.FromSeconds(5)); Console.WriteLine("{0} - Handled {1} messages. Waiting for completion.", DateTime.Now, handleCount); waitCount++; }while (handleCount < throttleMessageCount && waitCount < 100); listener.StopListening(); stopwatch.Stop(); Console.WriteLine("{0} - Handled {1} messages.", DateTime.Now, handleCount); Console.WriteLine("{0} - Took {1} ms", DateTime.Now, stopwatch.ElapsedMilliseconds); Console.WriteLine("{0} - Throughput {1} msg/sec", DateTime.Now, (float)handleCount / stopwatch.ElapsedMilliseconds * 1000); Assert.AreEqual(throttleMessageCount, handleCount); }
// Use this to manually test the performance / throttling of getting messages out of the queue. public void HandlingManyMessages(int throttleMessageCount) { var locker = new object(); var awsQueueClient = CreateMeABus.DefaultClientFactory().GetSqsClient(RegionEndpoint.EUWest1); var q = new SqsQueueByName(RegionEndpoint.EUWest1, "throttle_test", awsQueueClient, 1); if (!q.Exists()) { q.Create(new SqsBasicConfiguration()); Thread.Sleep(TimeSpan.FromMinutes(1)); // wait 60 secs for queue creation to be guaranteed completed by aws. :( } Assert.True(q.Exists()); Console.WriteLine("{0} - Adding {1} messages to the queue.", DateTime.Now, throttleMessageCount); var entriesAdded = 0; // Add some messages do { var entries = new List<SendMessageBatchRequestEntry>(); for (var j = 0; j < 10; j++) { var batchEntry = new SendMessageBatchRequestEntry { MessageBody = "{\"Subject\":\"GenericMessage\", \"Message\": \"" + entriesAdded.ToString() + "\"}", Id = Guid.NewGuid().ToString() }; entries.Add(batchEntry); entriesAdded++; } awsQueueClient.SendMessageBatch(new SendMessageBatchRequest { QueueUrl = q.Url, Entries = entries }); } while (entriesAdded < throttleMessageCount); Console.WriteLine("{0} - Done adding messages.", DateTime.Now); var handleCount = 0; var serialisations = Substitute.For<IMessageSerialisationRegister>(); var monitor = Substitute.For<IMessageMonitor>(); var handler = Substitute.For<IHandler<GenericMessage>>(); handler.Handle(null).ReturnsForAnyArgs(true).AndDoes(x => {lock (locker) { handleCount++; } }); serialisations.DeserializeMessage(string.Empty).ReturnsForAnyArgs(new GenericMessage()); var listener = new SqsNotificationListener(q, serialisations, monitor); listener.AddMessageHandler(() => handler); var stopwatch = new Stopwatch(); stopwatch.Start(); listener.Listen(); var waitCount = 0; do { Thread.Sleep(TimeSpan.FromSeconds(5)); Console.WriteLine("{0} - Handled {1} messages. Waiting for completion.", DateTime.Now, handleCount); waitCount++; } while (handleCount < throttleMessageCount && waitCount < 100); listener.StopListening(); stopwatch.Stop(); Console.WriteLine("{0} - Handled {1} messages.", DateTime.Now, handleCount); Console.WriteLine("{0} - Took {1} ms", DateTime.Now, stopwatch.ElapsedMilliseconds); Console.WriteLine("{0} - Throughput {1} msg/sec", DateTime.Now, (float)handleCount / stopwatch.ElapsedMilliseconds * 1000); Assert.AreEqual(throttleMessageCount, handleCount); }
public void CorrectQueueNameShouldMatch() { var sqsQueueByName = new SqsQueueByName(RegionEndpoint.EUWest1, "some-queue-name", _client, RetryCount, _log); sqsQueueByName.Exists().ShouldBeTrue(); }
public void IncorrectPartialQueueNameDoNotMatch() { var sqsQueueByName = new SqsQueueByName(RegionEndpoint.EUWest1, "some-queue", _client, RetryCount, _log); sqsQueueByName.Exists().ShouldBeFalse(); }
private void AssertThatQueueDoesNotExist(string name) { var sqsQueueByName = new SqsQueueByName(RegionEndpoint.EUWest1, name, _client, 1); Assert.IsFalse(sqsQueueByName.Exists(), string.Format("Expecting queue '{0}' to not exist but it does.", name)); }
public void CorrectQueueNameShouldMatch() { var sqsQueueByName = new SqsQueueByName(RegionEndpoint.EUWest1, "some-queue-name", _client, RetryCount); Assert.IsTrue(sqsQueueByName.Exists()); }
private void EnsureQueueExists(SqsQueueByName queue) { if (!queue.Exists()) throw new System.InvalidOperationException($"{queue.QueueName} does not exist."); }