void BuildChannel(MessageProcessor startPoint, RequestRecieveChannelSchema schema, ReceiveMessageCache messageCache)
 {
     MessagePipelineBuilder.Build()
         .With(startPoint)
         .ToProcessorIf(new NullMessageProcessor(), schema.BlockMessages)
         .ToProcessor(new ReceiverAuthenticationSessionVerifier(authenticationSessionCache, authenticatedServerRegistry))
         .ToProcessor(new SequenceOriginApplier(messageCache))
         .ToProcessor(new MessageSendTimeRemover())
         .ToProcessor(new ReceiveChannelMessageCacher(messageCache))
         .ToProcessor(new MessageAcknowledger(acknowledgementSender))
         .ToSimpleMessageRepeater(messageCache, systemTime, taskRepeater)
         .ToProcessor(new ReceiveChannelMessageCacher(messageCache))
         .Queue()
         .ToResequencerIfSequenced(messageCache, schema)
         .ToProcessor(new ReplyChannelSelector(replyAddressLookup, correlationLookup))
         .ToProcessor(new ExceptionReplier(schema.ContinueOnException))
         .ToProcessor(new MessageHookRunner<MessagePayload>(schema.PreUnpackagingHooks))
         .ToConverter(new MessagePayloadUnpackager(serialiser))
         .ToProcessor(new MessageFilter(schema.FilterStrategy))
         .ToProcessor(schema.UnitOfWorkRunnerCreator())
         .ToProcessor(new BatchUnpackager())
         .ToProcessorIf(new MainThreadMessageMashaller(mainThreadMarshaller), schema.HandleRequestsOnMainThread)
         .ToProcessor(new MessageHookRunner<object>(schema.Hooks))
         .ToEndPoint(messageHandlerRouter);
 }