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); } }