Exemple #1
0
 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();
     }
 }
Exemple #3
0
        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);
 }