Пример #1
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            using var scopeAWS = _serviceScopeFactory.CreateScope();
            var AWSConfig = scopeAWS.ServiceProvider.GetRequiredService <IConfiguration>();

            // abre a conexao com  AWS passando as credenciais pelo appsettings.json
            IAmazonSQS sqs = new AmazonSQSClient(AWSConfig["AWS:awsAccessKeyId"], AWSConfig["AWS:awsSecretAccessKey"], RegionEndpoint.SAEast1);

            // faz a busca da url da fila pelo seu nome
            var queueUrl = sqs.GetQueueUrlAsync(AWSConfig["AWS:QueueUrl"]).Result.QueueUrl;
            var receiveMessageRequest = new ReceiveMessageRequest
            {
                MaxNumberOfMessages = 10,       // numero de MSG que vai buscar de uma vez
                QueueUrl            = queueUrl, // url da fila
                WaitTimeSeconds     = 20,       // tempo que vai ficar aguardando uma MSG ficar disponivel
            };



            while (!stoppingToken.IsCancellationRequested)
            {
                // sendgrid
                using var scope = _serviceScopeFactory.CreateScope();
                var sendGridClient = scope.ServiceProvider.GetRequiredService <ISendGridClient>();
                var configuration  = scope.ServiceProvider.GetRequiredService <IConfiguration>();

                // AWS
                var receiveMenssageResponse = sqs.ReceiveMessageAsync(receiveMessageRequest).Result;
                if (receiveMenssageResponse.Messages.Count > 0)
                {// se tiver mensagens para ler
                    foreach (var mensagens in receiveMenssageResponse.Messages)
                    {
                        try
                        {
                            // carrega o json da fila com os parametros:assunto, remetente, destinatario, conteudo
                            var DadosMSG = JsonConvert.DeserializeObject <email>(mensagens.Body);

                            // envio da mensagem
                            if (SendEmails.Send(sendGridClient, DadosMSG))
                            {// mensage foi enviada com sucesso é eliminada da fila
                                DeleteMSG(queueUrl, mensagens.ReceiptHandle, sqs);
                            }
                        }
                        catch (Exception ex)
                        {
                            throw (ex.InnerException);
                        }
                    }
                }

                await Task.Delay(TimeSpan.FromMinutes(1), cancellationToken);
            }
        }