Exemple #1
0
        protected override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            return(Task.Run(() =>
            {
                using var consumer = new ConsumerBuilder <int, byte[]>(_kafkaConfig)
                                     .Build();

                try
                {
                    consumer.Subscribe("results");

                    while (!stoppingToken.IsCancellationRequested)
                    {
                        try
                        {
                            var consumeResult = consumer.Consume(stoppingToken);

                            try
                            {
                                //_calculationDataFlow.ProcessMessage(consumeResult.Message.Value);
                                var deserializedMessage = MessagePackSerializer.Deserialize <CalculationPack>(consumeResult.Message.Value);
                                ResultData._result.Enqueue(deserializedMessage);

                                _resultsRepository.Save(deserializedMessage);

                                _logger.LogInformation(consumeResult.Message.Key.ToString());
                            }
                            catch (Exception ex)
                            {
                                _logger.LogError(ex, "Kafka consume message error: {0}", ex.Message);
                            }

                            if (consumeResult.IsPartitionEOF)
                            {
                                break;
                            }
                        }
                        catch (ConsumeException e)
                        {
                            _logger.LogError(e, $"Consumer for topic '{e.ConsumerRecord.Topic}'. ConsumeException, Key: {e.Error}");
                        }
                        catch (Exception ex)
                        {
                            _logger.LogError(ex, "Kafka consume message error: {0}", ex.Message);
                        }
                    }
                }
                catch (OperationCanceledException e)
                {
                    _logger.LogError(e, $"Consumer for topics data: {e.Message}");
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, $"Consumer for topics '{string.Join(';', "data")}'. Exception.");
                }
            }, stoppingToken));
        }
        public async Task <IActionResult> GetAsync(string left, string right, string operation)
        {
            var responce = new Dictionary <string, string>();

            try
            {
                var result = _calculator.Calculate(left, right, operation);
                var id     = await _resultsRepository.Save(result);

                _logger.LogInformation($"Result: {result}, Id: {id}");
                responce.Add("result", result);
                responce.Add("id", id);
                return(new JsonResult(responce));
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"Error: {e.Message}");
                responce.Add("error", e.Message);
                return(new JsonResult(responce));
            }
        }