コード例 #1
0
        IPipe <ConsumerConsumeContext <TConsumer, TMessage> > BuildConsumerPipe <T>(IPipeSpecification <ConsumerConsumeContext <T> >[] pipeSpecifications)
            where T : class
        {
            var builder = new ConsumerPipeBuilder <T>();

            for (int i = 0; i < pipeSpecifications.Length; i++)
            {
                pipeSpecifications[i].Apply(builder);
            }

            var builders = builder as ConsumerPipeBuilder <TConsumer>;

            if (builders == null)
            {
                throw new InvalidOperationException("Should not be null, ever");
            }

            return(Pipe.New <ConsumerConsumeContext <TConsumer, TMessage> >(x =>
            {
                foreach (var filter in builders.Filters)
                {
                    x.UseFilter(filter);
                }

                x.UseFilter(_consumeFilter);
            }));
        }
コード例 #2
0
        ConnectHandle IConsumerConnector.ConnectConsumer <T>(IConsumePipeConnector consumePipe, IConsumerFactory <T> consumerFactory,
                                                             IPipeSpecification <ConsumerConsumeContext <T> >[] pipeSpecifications)
        {
            var factory = consumerFactory as IConsumerFactory <TConsumer>;

            if (factory == null)
            {
                throw new ArgumentException("The consumer factory type does not match: " + TypeMetadataCache <T> .ShortName);
            }

            IPipe <ConsumerConsumeContext <TConsumer, TMessage> > consumerPipe = ConsumerPipeBuilder.BuildConsumerPipe(_consumeFilter, pipeSpecifications);

            IPipe <ConsumeContext <TMessage> > messagePipe = MessagePipeBuilder.BuildMessagePipe <TConsumer, TMessage, T>(pipeSpecifications, new ConsumerMessageFilter <TConsumer, TMessage>(factory, consumerPipe));

            return(consumePipe.ConnectConsumePipe(messagePipe));
        }
コード例 #3
0
        public void Configure(IReceiveEndpointBuilder builder)
        {
            var builders = new ConsumerPipeBuilder <RoutingSlip>();

            for (int i = 0; i < _pipeSpecifications.Count; i++)
            {
                _pipeSpecifications[i].Apply(builders);
            }

            IPipe <ConsumeContext <RoutingSlip> > messagePipe = Pipe.New <ConsumeContext <RoutingSlip> >(x =>
            {
                foreach (var filter in builders.Filters)
                {
                    x.UseFilter(filter);
                }

                x.UseFilter(_filterFactory());
            });

            builder.ConnectConsumePipe(messagePipe);
        }
コード例 #4
0
        ConnectHandle IConsumerConnector.ConnectConsumer <T>(IConsumePipeConnector consumePipe, IConsumerFactory <T> consumerFactory,
                                                             IPipeSpecification <ConsumerConsumeContext <T> >[] pipeSpecifications)
        {
            var factory = consumerFactory as IConsumerFactory <TConsumer>;

            if (factory == null)
            {
                throw new ArgumentException("The consumer factory type does not match: " + TypeMetadataCache <T> .ShortName);
            }

            var builder = new ConsumerPipeBuilder <T>();

            for (int i = 0; i < pipeSpecifications.Length; i++)
            {
                pipeSpecifications[i].Apply(builder);
            }

            var builders = builder as ConsumerPipeBuilder <TConsumer>;

            if (builders == null)
            {
                throw new InvalidOperationException("Should not be null, ever");
            }

            IPipe <ConsumerConsumeContext <TConsumer, TMessage> > messagePipe = Pipe.New <ConsumerConsumeContext <TConsumer, TMessage> >(x =>
            {
                foreach (var filter in builders.Filters)
                {
                    x.UseFilter(filter);
                }
                x.UseFilter(_consumeFilter);
            });

            IPipe <ConsumeContext <TMessage> > pipe =
                Pipe.New <ConsumeContext <TMessage> >(x => x.UseFilter(new ConsumerMessageFilter <TConsumer, TMessage>(factory, messagePipe)));

            return(consumePipe.ConnectConsumePipe(pipe));
        }
コード例 #5
0
        ConnectHandle IInstanceConnector.ConnectInstance <T>(IConsumePipeConnector consumePipe, T instance,
                                                             IPipeSpecification <ConsumerConsumeContext <T> >[] pipeSpecifications)
        {
            if (instance == null)
            {
                throw new ArgumentNullException(nameof(instance));
            }

            var consumer = instance as TConsumer;

            if (consumer == null)
            {
                throw new ConsumerException(
                          $"The instance type {instance.GetType().GetTypeName()} does not match the consumer type: {TypeMetadataCache<TConsumer>.ShortName}");
            }

            IPipe <ConsumerConsumeContext <TConsumer, TMessage> > consumerPipe = ConsumerPipeBuilder.BuildConsumerPipe(_consumeFilter, pipeSpecifications);

            IPipe <ConsumeContext <TMessage> > messagePipe = MessagePipeBuilder.BuildMessagePipe <TConsumer, TMessage, T>(pipeSpecifications,
                                                                                                                          new InstanceMessageFilter <TConsumer, TMessage>(consumer, consumerPipe));

            return(consumePipe.ConnectConsumePipe(messagePipe));
        }