private static EventHandler <MsgHandlerEventArgs> MessageHandler() { return((sender, args) => { Console.WriteLine($"Received: {args.Message}"); MessagesQueue.Add(args.Message); }); }
protected virtual void OnMessage( object sender, Message <string, TMessage> message) { MessagesQueue.Enqueue(message); SetLastReceivedMessagePerTopicPartition(message); if (MessagesQueue.Count >= ConsumerSettings.QueueBufferingMaxMessages) { ProcessQueue(); } }
public void EnQueueMessage(string to, string from, string message) { Messages msg = new Messages { FromEmailAddress = from, ToEmailAddress = to, Message = message }; MessagesQueue.Enqueue(msg); HasMessage = true; }
private void LogException(Exception exc) { Logger.ErrorStructured(new { LogSource = nameof(LogException), LogMessage = exc.ToString(), LogData = MessagesQueue.Select(x => new { x.Topic, x.Partition, x.Offset }) }); }
private void LogRetriedMessages() { Logger.WarningStructured(new { LogSource = nameof(LogRetriedMessages), LogMessage = "Retrying messages batch.", LogData = MessagesQueue.Select(x => new { x.Topic, x.Partition, x.Offset }) }); }
private void LogProcessedMessages() { Logger.InformationStructured(new { LogSource = nameof(LogProcessedMessages), LogMessage = "Successfully processed messages batch.", LogData = MessagesQueue.Select(x => new { x.Topic, x.Partition, x.Offset }) }); }
/// <summary> /// WndProc handler, pushes all messages to event queue /// <para>The downside of doing it this way is that LParam and WParam are not valid in case they are pointers when the method exits</para> /// </summary> /// <param name="m"></param> protected override void WndProc(ref Message m) { base.WndProc(ref m); if ((MessagesQueue == null) || (TransformMessage == null)) { return; } var tm = TransformMessage(ref m); if (tm != null) { MessagesQueue.Enqueue(tm); } }
private void LogSkippedMessages() { var logMessage = $"Skipping messages batch because {nameof(ConsumerSettings.RetryThreshold)} " + $"of {ConsumerSettings.RetryThreshold} was exceeded."; Logger.WarningStructured(new { LogSource = nameof(LogSkippedMessages), LogMessage = logMessage, LogData = MessagesQueue.Select(x => new { x.Topic, x.Partition, x.Offset }) }); }
private void ProcessQueue() { var retryCount = 0; var isProcessed = false; while (!isProcessed) { try { ++retryCount; if (ShouldSkipRetriedMessages(retryCount)) { LogSkippedMessages(); break; } isProcessed = TryProcess(MessagesQueue); if (isProcessed) { LogProcessedMessages(); } else { LogRetriedMessages(); BackOff(); } } catch (Exception ex) { LogException(ex); BackOff(); } } CommitLastReceivedMessagePerTopicPartition(); MessagesQueue.Clear(); LastReceivedMessagePerTopicPartition.Clear(); }
public void Enqueue(MessagesQueue data) { this._queue.Enqueue(data); }