private async Task SetupSubscription(Type type, string queueName) { var createQueueResponse = await this.sqsService.CreateQueue(queueName); var errorQueueName = $"{queueName}_error"; var createErrorQueueResponse = await this.sqsService.CreateQueue(errorQueueName); var createTopicResponse = await this.snsService.CreateTopic(queueName); await this.snsService.SubscribeQueueAsync(createTopicResponse.TopicArn, createQueueResponse.QueueUrl); if (Queues.ContainsKey(queueName)) { Queues[queueName] = new QueueInfo(type, createQueueResponse.QueueUrl); } else { Queues.Add(queueName, new QueueInfo(type, createQueueResponse.QueueUrl)); } if (Queues.ContainsKey(errorQueueName)) { Queues[errorQueueName] = new QueueInfo(type, createErrorQueueResponse.QueueUrl); } else { Queues.Add(errorQueueName, new QueueInfo(type, createErrorQueueResponse.QueueUrl)); } }
public async Task CheckForMessages <T>(QueueInfo queue) where T : Message { var queueUrl = queue.Url; var response = this.sqsService.ReceiveMessageAsync(queueUrl); if (response.Result.Messages.Count > 0) { var busMessage = response.Result.Messages.First(); T message = messageDeserializer.Deserialize <T>(busMessage); IHandlerAsync <T> handler = this.messageBus.GetHandler <T>(); if (handler != null) { var isSuccess = await handler.Handle(message); if (isSuccess) { await this.DeleteMessageAsync(queueUrl, busMessage.ReceiptHandle); } } } }