/// <summary>
        /// Handles the <see cref="IMessageReceiver.FeedMessageReceived"/> event
        /// </summary>
        /// <param name="sender">A <see cref="object"/> representation of the instance raising the event</param>
        /// <param name="e">A <see cref="FeedMessageReceivedEventArgs"/> instance containing event information</param>
        private void OnMessageReceived(object sender, FeedMessageReceivedEventArgs e)
        {
            var message          = e.Message;
            var validationResult = _messageValidator.Validate(message);

            switch (validationResult)
            {
            case ValidationResult.FAILURE:
                Log.Warn($"{WriteMessageInterest()}Validation of message=[{message}] failed. Raising OnUnparsableMessageReceived event");
                var messageType = _messageDataExtractor.GetMessageTypeFromMessage(message);

                var eventArgs = new UnparsableMessageEventArgs(messageType, message.ProducerId.ToString(), message.EventId, e.RawMessage);
                Dispatch(OnUnparsableMessageReceived, eventArgs, "OnUnparsableMessageReceived");
                return;

            case ValidationResult.PROBLEMS_DETECTED:
                Log.Warn($"{WriteMessageInterest()}Problems were detected while validating message=[{message}], but the message is still eligible for further processing.");
                _messageProcessor.ProcessMessage(message, MessageInterest, e.RawMessage);
                return;

            case ValidationResult.SUCCESS:
                Metric.Context("FEED").Meter($"FeedSession->MessageReceived ({MessageInterest.ProducerId})", Unit.Items).Mark();
                Log.Debug($"{WriteMessageInterest()}Message=[{message}] successfully validated. Continuing with message processing.");
                _messageProcessor.ProcessMessage(message, MessageInterest, e.RawMessage);
                return;

            default:
                Log.Error($"{WriteMessageInterest()}ValidationResult {Enum.GetName(typeof(ValidationResult), validationResult)} is not supported. Aborting processing of message=[{message}].");
                return;
            }
        }
Exemple #2
0
        /// <summary>
        /// Handles the <see cref="IMessageReceiver.FeedMessageReceived"/> event
        /// </summary>
        /// <param name="sender">A <see cref="object"/> representation of the instance raising the event</param>
        /// <param name="e">A <see cref="FeedMessageReceivedEventArgs"/> instance containing event information</param>
        private void OnFeedMessageReceived(object sender, FeedMessageReceivedEventArgs e)
        {
            var message          = e.Message;
            var validationResult = _messageValidator.Validate(message);

            switch (validationResult)
            {
            case ValidationResult.FAILURE:
                _log.LogWarning($"Validation of message=[{message}] failed. Raising OnUnparsableMessageReceived event");
                MessageType messageType;
                try
                {
                    messageType = _messageDataExtractor.GetMessageTypeFromMessage(message);
                }
                catch (ArgumentException ex)
                {
                    _log.LogError($"An error occurred while determining the MessageType of the message whose validation has failed. Message={message}", ex);
                    return;
                }
                var eventArgs = new UnparsableMessageEventArgs(messageType, message.ProducerId.ToString(), message.EventId, e.RawMessage);
                Dispatch(UnparsableMessageReceived, eventArgs, "OnUnparsableMessageReceived");
                return;

            case ValidationResult.PROBLEMS_DETECTED:
                _log.LogWarning($"Problems were detected while validating message=[{message}], but the message is still eligible for further processing.");
                return;

            case ValidationResult.SUCCESS:
                _log.LogDebug($"Message=[{message}] successfully validated. Continuing with message processing");
                ProcessMessage(message, e.RawMessage);
                return;

            default:
                _log.LogError($"ValidationResult {Enum.GetName(typeof(ValidationResult), validationResult)} is not supported. Aborting processing of message=[{message}]");
                return;
            }
        }