コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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);
                    }
                }
            }
        }