コード例 #1
0
 public static void Init <T>(this IConsumerOf <T> target, IEnumerable <T> items)
 {
     foreach (var item in items)
     {
         target.Input.Post(item);
     }
 }
コード例 #2
0
        /// <summary>
        /// Registers a new consumer of messages with label <paramref name="label"/>
        /// </summary>
        /// <param name="label">
        /// The label.
        /// </param>
        /// <param name="consumer">
        /// The consumer.
        /// </param>
        /// <typeparam name="T">
        /// The message payload type
        /// </typeparam>
        public override void RegisterConsumer <T>(MessageLabel label, IConsumerOf <T> consumer)
        {
            this.logger.Trace($"Registering consumer of [{typeof(T).Name}] in receiver of label [{label}]");

            foreach (var listener in this.listeners)
            {
                listener.RegisterConsumer(label, consumer, this.Configuration.Validator);
            }
        }
コード例 #3
0
ファイル: RabbitReceiver.cs プロジェクト: Sliborskii/Contour
        /// <summary>
        /// Registers a new consumer of messages with label <paramref name="label"/>
        /// </summary>
        /// <param name="label">
        /// The label.
        /// </param>
        /// <param name="consumer">
        /// The consumer.
        /// </param>
        /// <typeparam name="T">
        /// The message payload type
        /// </typeparam>
        public override void RegisterConsumer <T>(MessageLabel label, IConsumerOf <T> consumer)
        {
            this.logger.Trace($"Registering consumer of [{typeof(T).Name}] in receiver of label [{label}]");

            foreach (var listener in this.listeners)
            {
                listener.RegisterConsumer(label, consumer, this.Configuration.Validator);

                var listenerLabels = string.Join(",", listener.AcceptedLabels);
                this.logger.Trace($"Listener of labels ({listenerLabels}) has registered a consumer of label [{label}]");
            }
        }
コード例 #4
0
 public static void SendTo <T>(this IProducerOf <T> source, IConsumerOf <T> target, Predicate <T> filter = null)
 {
     if (filter != null)
     {
         source.Output.LinkTo(target.Input, new DataflowLinkOptions
         {
             PropagateCompletion = true
         }, filter);
     }
     else
     {
         source.Output.LinkTo(target.Input, new DataflowLinkOptions
         {
             PropagateCompletion = true
         });
     }
 }
コード例 #5
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);
                }

                consumer.Handle(context);
            };

            this.consumers[label] = consumingAction;
        }
コード例 #6
0
ファイル: Listener.cs プロジェクト: maxacoustic/Contour
        /// <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;
        }
コード例 #7
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);
                }

                this.logger.Trace(
                    m => m($"{typeof(T)}: получил сообщение " +
                           $"[{JsonConvert.SerializeObject(context.Message.Payload)}] на обработку"));

                consumer.Handle(context);
            };

            this.consumers[label] = consumingAction;
        }
コード例 #8
0
 /// <summary>
 /// The register consumer.
 /// </summary>
 /// <param name="label">
 /// The label.
 /// </param>
 /// <param name="consumer">
 /// The consumer.
 /// </param>
 /// <typeparam name="T">
 /// </typeparam>
 public abstract void RegisterConsumer <T>(MessageLabel label, IConsumerOf <T> consumer) where T : class;
コード例 #9
0
        /// <summary>Регистрирует обработчик входящего сообщения.</summary>
        /// <param name="consumer">Обработчик входящего сообщения.</param>
        /// <typeparam name="T">Тип обрабатываемого сообщения.</typeparam>
        /// <returns>Конфигуратор получателя с установленным обработчиком входящих сообщений.</returns>
        public IReceiverConfigurator <T> ReactWith <T>(IConsumerOf <T> consumer) where T : class
        {
            this.ReceiverRegistration = l => l.RegisterConsumer(this.Label, consumer);

            return(new TypedReceiverConfigurationDecorator <T>(this));
        }
コード例 #10
0
        /// <summary>
        /// The register consumer.
        /// </summary>
        /// <param name="label">
        /// The label.
        /// </param>
        /// <param name="consumer">
        /// The consumer.
        /// </param>
        /// <typeparam name="T">
        /// </typeparam>
        public override void RegisterConsumer <T>(MessageLabel label, IConsumerOf <T> consumer)
        {
            Logger.Trace(m => m("Registering consumer of [{0}] for receiver of [{1}].", typeof(T).Name, label));

            this.listener.RegisterConsumer(label, consumer, this.Configuration.Validator);
        }
コード例 #11
0
 public CachingConsumerOf(IConsumerOf <T> consumer, CacheConfiguration cacheConfiguration)
 {
     this.consumer           = consumer;
     this.cacheConfiguration = cacheConfiguration;
 }
コード例 #12
0
 /// <summary>Регистрирует обработчик входящего сообщения.</summary>
 /// <param name="consumer">Обработчик входящего сообщения.</param>
 /// <typeparam name="T1">Тип обрабатываемого сообщения.</typeparam>
 /// <returns>Конфигуратор получателя с установленным обработчиком входящих сообщений.</returns>
 public IReceiverConfigurator <T1> ReactWith <T1>(IConsumerOf <T1> consumer) where T1 : class
 {
     return(this.configuration.ReactWith(consumer));
 }
コード例 #13
0
        /// <summary>Регистрирует обработчик входящего сообщения.</summary>
        /// <param name="consumer">Обработчик входящего сообщения.</param>
        /// <returns>Конфигуратор получателя с установленным обработчиком входящих сообщений.</returns>
        public IReceiverConfigurator <T> ReactWith(IConsumerOf <T> consumer)
        {
            this.configuration.ReactWith(consumer);

            return(this);
        }
コード例 #14
0
 public void Register <T>(IConsumerOf <T> handler, HandlerMode mode) where T : Message
 {
     _handlers.Add(new KeyValuePair <Type, HandlerItem>(typeof(IConsumerOf <T>), new HandlerItem(typeof(T), handler, mode)));
 }
コード例 #15
0
 public void Register <T>(IConsumerOf <T> handler) where T : Message
 {
     Register(handler, HandlerMode.Explicit);
 }
コード例 #16
0
        // not sure if I really want/need these

        public static void Init <T>(this IConsumerOf <T> target, T item)
        {
            target.Input.Post(item);
        }