static async Task ProcessMessagesAsync(Message message, CancellationToken token)
        {
            string dados = Encoding.UTF8.GetString(message.Body);

            _logger.Information($"Mensagem recebida: {dados}");

            var cotacao = JsonSerializer.Deserialize <CotacaoMoeda>(dados,
                                                                    new JsonSerializerOptions()
            {
                PropertyNameCaseInsensitive = true
            });

            var validationResult = new CotacaoMoedaValidator().Validate(cotacao);

            if (validationResult.IsValid)
            {
                cotacao.UltimaAtualizacao = DateTime.Now;
                var dbRedis = _conexaoRedis.GetDatabase();
                dbRedis.StringSet(
                    "COTACAO-" + cotacao.Sigla,
                    JsonSerializer.Serialize(cotacao),
                    expiry: null);

                _logger.Information("Cotação registrada com sucesso!");

                using (var clientLogicAppSlack = new HttpClient())
                {
                    clientLogicAppSlack.BaseAddress = new Uri(
                        _configuration["UrlLogicAppAlerta"]);
                    clientLogicAppSlack.DefaultRequestHeaders.Accept.Clear();
                    clientLogicAppSlack.DefaultRequestHeaders.Accept.Add(
                        new MediaTypeWithQualityHeaderValue("application/json"));

                    var requestMessage =
                        new HttpRequestMessage(HttpMethod.Post, String.Empty);

                    requestMessage.Content = new StringContent(
                        JsonSerializer.Serialize(new
                    {
                        moeda = cotacao.Sigla,
                        valor = cotacao.Valor,
                    }), Encoding.UTF8, "application/json");

                    var respLogicApp = clientLogicAppSlack
                                       .SendAsync(requestMessage).Result;
                    respLogicApp.EnsureSuccessStatusCode();

                    _logger.Information(
                        "Envio de alerta para Logic App de integração com o Slack");
                }
            }
            else
            {
                _logger.Error("Dados inválidos para a Cotação");
            }

            await _subscriptionClient.CompleteAsync(
                message.SystemProperties.LockToken);
        }
Ejemplo n.º 2
0
        public void Run([ServiceBusTrigger("queue-cotacoes", Connection = "AzureServiceBus")] string myQueueItem, ILogger log)
        {
            log.LogInformation($"ProcessarCotacao - Dados: {myQueueItem}");

            CotacaoMoeda cotacao = null;

            try
            {
                cotacao = JsonSerializer.Deserialize <CotacaoMoeda>(myQueueItem,
                                                                    new JsonSerializerOptions()
                {
                    PropertyNameCaseInsensitive = true
                });
            }
            catch
            {
                log.LogInformation($"ProcessarCotacao - Erro durante a deserialização");
            }

            if (cotacao == null)
            {
                return;
            }

            var validationResult = new CotacaoMoedaValidator().Validate(cotacao);

            if (validationResult.IsValid)
            {
                log.LogInformation($"ProcessarCotacao - Dados pós formatação: {JsonSerializer.Serialize(cotacao)}");
                _repository.Save(cotacao);
                log.LogInformation("ProcessarCotacao - Cotação registrada com sucesso!");
            }
            else
            {
                log.LogError("ProcessarCotacao - Dados invalidos para a Cotação");
                foreach (var error in validationResult.Errors)
                {
                    log.LogError($"ProcessarCotacao - {error.ErrorMessage}");
                }
            }
        }
Ejemplo n.º 3
0
        public static void Run([ServiceBusTrigger("topic-cotacoes0", "FunctionAppCotacoes", Connection = "AzureServiceBusConnection")] string mySbMsg, ILogger log)
        {
            log.LogInformation($"CotacoesServiceBusTopicTrigger - Dados: {mySbMsg}");

            var cotacao = JsonSerializer.Deserialize <CotacaoMoeda>(mySbMsg,
                                                                    new JsonSerializerOptions()
            {
                PropertyNameCaseInsensitive = true
            });
            var validationResult = new CotacaoMoedaValidator().Validate(cotacao);

            if (validationResult.IsValid)
            {
                log.LogInformation($"CotacoesServiceBusTopicTrigger - Dados pós formatação: {mySbMsg}");
                CotacoesMoedasRepository.Save(cotacao);
                log.LogInformation("CotacoesServiceBusTopicTrigger - Cotação registrada com sucesso!");
            }
            else
            {
                log.LogInformation("CotacoesServiceBusTopicTrigger - Dados inválidos para a Cotação");
            }
        }
        public static void Run(
            [RabbitMQTrigger("queue-cotacoes", ConnectionStringSetting = "BrokerRabbitMQ")] string inputMessage,
            ILogger log)
        {
            CotacaoMoeda cotacao = null;

            try
            {
                cotacao = JsonSerializer.Deserialize <CotacaoMoeda>(inputMessage,
                                                                    new JsonSerializerOptions()
                {
                    PropertyNameCaseInsensitive = true
                });
            }
            catch
            {
                log.LogError("MoedasRabbitMQTrigger - Erro durante a deserialização!");
            }

            if (cotacao != null)
            {
                var validationResult = new CotacaoMoedaValidator().Validate(cotacao);
                if (validationResult.IsValid)
                {
                    log.LogInformation($"MoedasRabbitMQTrigger - Dados pós formatação: {JsonSerializer.Serialize(cotacao)}");
                    CotacoesMoedasRepository.Save(cotacao);
                    log.LogInformation("MoedasRabbitMQTrigger - Cotação registrada com sucesso!");
                }
                else
                {
                    log.LogError("MoedasRabbitMQTrigger - Dados inválidos para a Cotação");
                    foreach (var error in validationResult.Errors)
                    {
                        log.LogError($"MoedasRabbitMQTrigger - {error.ErrorMessage}");
                    }
                }
            }
        }