void BuildPipeline(ReplyReceiveChannelSchema schema, ReceiveMessageCache messageCache)
 {
     MessagePipelineBuilder.Build()
         .With(messageReceiver)
         .ToProcessor(new BodyMessageFilter(schema.Address))
         .ToProcessor(new SenderAuthenticationSessionVerifier(authenticationSessionCache, authenticatedServerRegistry))
         .ToProcessor(new MessageRegisteredAddressReassigner(serverAddressRegistry))
         .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)
         .ToProcessorIf(new RequestReplyCorrelator(correlationLookup), schema.CorrelateReplyToRequest)
         .ToProcessor(new ExceptionHandler(schema.ContinueOnException))
         .ToConverter(new MessagePayloadUnpackager(serialiser))
         .ToProcessor(schema.UnitOfWorkRunnerCreator())
         .ToProcessor(new BatchUnpackager())
         .ToProcessorIf(new MainThreadMessageMashaller(mainThreadMarshaller), schema.HandleRepliesOnMainThread)
         .ToProcessor(new MessageHookRunner<object>(schema.Hooks))
         .ToEndPoint(messageHandlerRouter);
 }
 public void Build(ReplyReceiveChannelSchema schema)
 {
     BuildPipeline(schema, CreateCache(schema));
     NotifyReplyReceiveChannelBuilt(schema);
 }
 ReceiveMessageCache CreateCache(ReplyReceiveChannelSchema schema)
 {
     return messageCacheFactory.BuildReceiveCache(PersistenceUseType.ReplyReceive, schema.Address, schema);
 }
 static void NotifyReplyReceiveChannelBuilt(ReplyReceiveChannelSchema schema)
 {
     Messenger.Send(new ReplyReceiveChannelBuilt
     {
         CacheAddress = schema.Address,
         ReceiverAddress = schema.ToAddress,
         SenderAddress = schema.Address
     });
 }