Exemplo n.º 1
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}");
            }
        }
        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");
            string nomeTopic = _configuration["Kafka_Topic"];

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

            CancellationTokenSource cts = new CancellationTokenSource();

            Console.CancelKeyPress += (_, e) =>
            {
                e.Cancel = true;
                cts.Cancel();
            };

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

                    try
                    {
                        while (true)
                        {
                            var    cr    = consumer.Consume(cts.Token);
                            string 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.Error("Dados inválidos para a Ação");
                            }
                        }
                    }
                    catch (OperationCanceledException)
                    {
                        consumer.Close();
                        _logger.Warning("Cancelada a execução do Consumer...");
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error($"Exceção: {ex.GetType().FullName} | " +
                              $"Mensagem: {ex.Message}");
            }
        }