コード例 #1
0
        public void Run()
        {
            _logger.Information("Testando o consumo de mensagens com Kafka");
            var nomeTopic = _configuration["Kafka_Topic"];

            _logger.Information($"Topic = {nomeTopic}");
            try
            {
                var bootstrapServers = _configuration["Kafka_Broker"];
                TopicTools.CreateTopicAsync(bootstrapServers, nomeTopic);
            }
            catch (Exception e)
            {
                _logger.Warning("Topic já existe");
            }


            try
            {
                using var consumer = GetConsumerBuilder();
                consumer.Subscribe(nomeTopic);

                try
                {
                    while (true)
                    {
                        var cr    = consumer.Consume();
                        var dados = cr.Message.Value;

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

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

                        var validationResult = new PagamentoStatusValidator().Validate(pagamento);
                        if (validationResult.IsValid)
                        {
                            _deliveryExternalControl.AtualizaStatusPagamento(pagamento);
                            _logger.Information("Ação registrada com sucesso!");
                        }
                        else
                        {
                            _logger.Warning("Dados inválidos para a Ação");
                        }
                    }
                }
                catch (OperationCanceledException)
                {
                    consumer.Close();
                    _logger.Warning("Cancelada a execução do Consumer...");
                }
            }
            catch (Exception ex)
            {
                _logger.Warning($"Exceção: {ex.GetType().FullName} | " +
                                $"Mensagem: {ex.Message}");
            }
        }
コード例 #2
0
        public void Run()
        {
            _logger.Information("Recuperando login e senha");
            string usuario = _configuration["user_login"];
            string senha   = _configuration["user_pass"];

            _logger.Information("Testando o consumo de mensagens com Kafka");
            var nomeTopic = _configuration["Kafka_Topic"];

            _logger.Information($"Topic = {nomeTopic}");

            try
            {
                var bootstrapServers = _configuration["Kafka_Broker"];
                TopicTools.CreateTopicAsync(bootstrapServers, nomeTopic);
            }
            catch (Exception e)
            {
                _logger.Warning("Topic já existe");
            }


            try
            {
                using var consumer = GetConsumerBuilder();
                consumer.Subscribe(nomeTopic);

                try
                {
                    while (true)
                    {
                        try
                        {
                            var cr    = consumer.Consume();
                            var dados = cr.Message.Value;

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

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

                            var validationResult = new PedidoValidator().Validate(pedido);
                            if (validationResult.IsValid)
                            {
                                var token = _deliveryExternalControl.Logar(new Auth()
                                {
                                    Login = usuario, Senha = senha
                                });
                                _deliveryExternalControl.EnviarPedido(pedido, token);
                                _logger.Information("Ação registrada com sucesso!");
                            }
                            else
                            {
                                _logger.Warning("Dados inválidos para a Ação");
                            }
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                            _logger.Warning("Erro na fila");
                        }
                    }
                }
                catch (OperationCanceledException)
                {
                    consumer.Close();
                    _logger.Warning("Cancelada a execução do Consumer...");
                }
            }
            catch (Exception ex)
            {
                _logger.Warning($"Exceção: {ex.GetType().FullName} | " +
                                $"Mensagem: {ex.Message}");
            }
        }