Example #1
0
        protected override void Preprocess(MessageEx message)
        {
            MessageLabel messageLabel    = MessageLabel.Parse(message.Message.Label);
            var          idForCorelation = messageLabel.IdForCorrelation;

            if (string.IsNullOrWhiteSpace(idForCorelation))
            {
                idForCorelation = message.Message.Id;
            }
            var newMessageLabel = new MessageLabel(messageLabel.WindowsIdentityName, idForCorelation);

            message.Message.Label = newMessageLabel.ToString();
        }
Example #2
0
        /// <summary>
        /// Добавляет еще одного обработчика сообщений.
        /// </summary>
        /// <param name="label">
        /// Метка сообщения, которое может быть обработано.
        /// </param>
        /// <param name="consumer">
        /// Обработчик сообщения.
        /// </param>
        /// <param name="validator">
        /// Механизм проверки входящего сообщения.
        /// </param>
        /// <typeparam name="T">
        /// Тип входящего сообщения.
        /// </typeparam>
        public void RegisterConsumer <T>(MessageLabel label, IConsumerOf <T> consumer, IMessageValidator validator) where T : class
        {
            ConsumingAction consumingAction = delivery =>
            {
                IConsumingContext <T> context = delivery.BuildConsumingContext <T>(label);

                if (validator != null)
                {
                    validator.Validate(context.Message).ThrowIfBroken();
                }
                else
                {
                    this.validatorRegistry.Validate(context.Message);
                }

                var sw = Stopwatch.StartNew();

                consumer.Handle(context);

                this.MetricsCollector?.Histogram("contour.rmq.consuming.duration", sw.ElapsedMilliseconds, 1D, new[] { "endpoint:" + this.busContext.Endpoint.Address, "label:" + label.ToString() });
            };

            this.consumers[label] = consumingAction;
        }