示例#1
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            if (string.IsNullOrWhiteSpace(_applicationSettings.ParticipantFinishedQueue))
            {
                _logger.LogWarning("No queue url found, aborting listening to messages");
                return;
            }
            if (string.IsNullOrWhiteSpace(_configuration["PostMark:ApiKey"]))
            {
                _logger.LogWarning("No postman apikey aborting listening to messages");
                return;
            }


            _logger.LogDebug("Listening to messages");

            while (!stoppingToken.IsCancellationRequested)
            {
                var receiveMessageRequest = new ReceiveMessageRequest(_applicationSettings.ParticipantFinishedQueue)
                {
                    WaitTimeSeconds = 20
                };
                var queueResponse = await _sqsService.ReceiveMessageAsync(receiveMessageRequest, stoppingToken);

                if (!queueResponse.Messages.Any())
                {
                    continue;
                }

                try
                {
                    var mailsToSend = queueResponse.Messages.Select(MapToMailMessage);
                    await _postMarkClient.SendEmailsWithTemplateAsync(mailsToSend.ToArray());

                    await _sqsService.DeleteMessageBatchAsync(
                        _applicationSettings.ParticipantFinishedQueue,
                        queueResponse.Messages
                        .Select(x => new DeleteMessageBatchRequestEntry(x.MessageId, x.ReceiptHandle)).ToList(), stoppingToken);
                }
                catch (Exception e)
                {
                    _logger.LogError($"Failed to process messages {e}");
                }
            }
        }