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(); }
/// <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; }