コード例 #1
0
        public ConnectHandle ConnectConsumer(IConsumePipeConnector consumePipe, IConsumerFactory <TConsumer> consumerFactory,
                                             IConsumerSpecification <TConsumer> specification)
        {
            var options = specification.Options <BatchOptions>();

            var messageLimit     = options.MessageLimit;
            var timeLimit        = options.TimeLimit;
            var concurrencyLimit = options.ConcurrencyLimit;

            IConsumerMessageSpecification <TConsumer, Batch <TMessage> > batchMessageSpecification = specification.GetMessageSpecification <Batch <TMessage> >();

            var consumeFilter = new MethodConsumerMessageFilter <TConsumer, Batch <TMessage> >();

            IPipe <ConsumerConsumeContext <TConsumer, Batch <TMessage> > > batchConsumerPipe = batchMessageSpecification.Build(consumeFilter);

            IPipe <ConsumeContext <Batch <TMessage> > > batchMessagePipe = batchMessageSpecification.BuildMessagePipe(x =>
            {
                x.UseFilter(new ConsumerMessageFilter <TConsumer, Batch <TMessage> >(consumerFactory, batchConsumerPipe));
            });

            IBatchCollector <TMessage> collector = null;

            if (options.GroupKeyProvider == null)
            {
                collector = new BatchCollector <TMessage>(messageLimit, timeLimit, concurrencyLimit, batchMessagePipe);
            }
            else
            {
                if (options.GroupKeyProvider.GetType().ClosesType(typeof(IGroupKeyProvider <,>), out Type[] types))
コード例 #2
0
        public ConsumeMessageConnectorFactory()
        {
            var filter = new MethodConsumerMessageFilter <TConsumer, TMessage>();

            _consumerConnector = new ConsumerMessageConnector <TConsumer, TMessage>(filter);
            _instanceConnector = new InstanceMessageConnector <TConsumer, TMessage>(filter);
        }
コード例 #3
0
        public ConnectHandle ConnectConsumer(IConsumePipeConnector consumePipe, IConsumerFactory <TConsumer> consumerFactory,
                                             IConsumerSpecification <TConsumer> specification)
        {
            var options = specification.Options <BatchOptions>();

            var messageLimit     = options.MessageLimit;
            var timeLimit        = options.TimeLimit;
            var concurrencyLimit = options.ConcurrencyLimit;

            IConsumerMessageSpecification <TConsumer, Batch <TMessage> > batchMessageSpecification = specification.GetMessageSpecification <Batch <TMessage> >();

            var consumeFilter = new MethodConsumerMessageFilter <TConsumer, Batch <TMessage> >();

            IPipe <ConsumerConsumeContext <TConsumer, Batch <TMessage> > > batchConsumerPipe = batchMessageSpecification.Build(consumeFilter);

            var factory = new BatchConsumerFactory <TConsumer, TMessage>(consumerFactory, messageLimit, concurrencyLimit, timeLimit, batchConsumerPipe);

            IConsumerSpecification <IConsumer <TMessage> > messageConsumerSpecification =
                ConsumerConnectorCache <IConsumer <TMessage> > .Connector.CreateConsumerSpecification <IConsumer <TMessage> >();

            IConsumerMessageSpecification <IConsumer <TMessage>, TMessage> messageSpecification =
                messageConsumerSpecification.GetMessageSpecification <TMessage>();

            IPipe <ConsumerConsumeContext <IConsumer <TMessage>, TMessage> > consumerPipe =
                messageSpecification.Build(new MethodConsumerMessageFilter <IConsumer <TMessage>, TMessage>());

            IPipe <ConsumeContext <TMessage> > messagePipe = messageSpecification.BuildMessagePipe(x =>
            {
                x.UseFilter(new ConsumerMessageFilter <IConsumer <TMessage>, TMessage>(factory, consumerPipe));
            });

            var handle = consumePipe.ConnectConsumePipe(messagePipe);

            return(new BatchConnectHandle(handle, factory));
        }
コード例 #4
0
        void IBatchConfigurator <TMessage> .Consumer <TConsumer>(IConsumerFactory <TConsumer> consumerFactory)
        {
            var filter = new MethodConsumerMessageFilter <TConsumer, Batch <TMessage> >();

            var pipe = Pipe.New <ConsumerConsumeContext <TConsumer, Batch <TMessage> > >(x => x.UseFilter(filter));

            var batchConsumerFactory = new BatchConsumerFactory <TConsumer, TMessage>(consumerFactory, MessageLimit, TimeLimit, pipe);

            _configurator.Consumer(batchConsumerFactory);
        }
コード例 #5
0
        public void Configure(IReceiveEndpointBuilder builder)
        {
            var filter = new MethodConsumerMessageFilter <TConsumer, Batch <TMessage> >();

            var consumerPipe = _messageSpecification.Build(filter);

            var batchConsumerFactory = new BatchConsumerFactory <TConsumer, TMessage>(_consumerFactory, _messageLimit, _timeLimit, consumerPipe);

            var specification = ConsumerConnectorCache <IConsumer <TMessage> > .Connector.CreateConsumerSpecification <IConsumer <TMessage> >();

            ConsumerConnectorCache <IConsumer <TMessage> > .Connector.ConnectConsumer(builder, batchConsumerFactory, specification);
        }
コード例 #6
0
 public ConsumeMessageConnectorFactory()
 {
     _filter = new MethodConsumerMessageFilter <TConsumer, TMessage>();
 }