private void Handle(object sender, BasicDeliverEventArgs e) { try { _logger.LogInformation("WordCounter.Worker: got message"); var bytes = e.Body; var msg = JsonConvert.DeserializeObject <BusinessMessage>(Encoding.UTF8.GetString(bytes)); var _processor = new WordCounterProcessor(); var processResult = _processor.Process(msg); if (processResult.Status == OperationStatus.Success) { _wordCountersRepository.Create(new CountResultRow() { CorrelationId = msg.CorrelationId, WordCount = processResult.Data.WordCount }); var addToIndexInBackground = new Task( () => { _elasticClient.IndexDocument <BusinessMessage>(msg); }) .ContinueWith(finished => _logger.LogError(finished.Exception?.Message), TaskContinuationOptions.OnlyOnFaulted); addToIndexInBackground.Start(); } else { var errors = string.Join(';', processResult.Errors); _logger.LogError($"msg {msg.CorrelationId} was not processed: {errors}"); // send another message to queue } } catch (Exception ex) { _logger.LogError($"Unexpected error during message processing: {ex.Message}"); throw; } }
public int CreateResult(CountResultRow row) { WaitForDb(); return(_wordCountersRepository.Create(row)); }