public IMessageInputter<MessagePayload> BuildChannel(SubscriberSendChannelSchema schema) { SendMessageCache cache = CreateCache(schema); MessageProcessor startPoint = CreateStartPoint(); RegisterCacheWithAcknowledgementHandler(cache); BuildPipeline(schema, startPoint, cache); NotifySubscriberSendChannelBuilt(schema); return startPoint; }
void BuildPipeline(SubscriberSendChannelSchema schema, MessageProcessor startPoint, SendMessageCache cache) { MessagePipelineBuilder.Build() .With(startPoint) .ToProcessor(new MessageSendTimeRemover()) .ToProcessor(new MessageAddresser(schema.FromAddress, schema.SubscriberAddress)) .ToProcessor(new SendChannelMessageCacher(cache)) .ToMessageRepeater(cache, systemTime, taskRepeater, schema.RepeatStrategy) .ToProcessor(new SendChannelMessageCacheUpdater(cache)) .ToProcessor(new SequenceOriginRecorder(cache)) .ToProcessor(new PersistenceSourceRecorder()) .Queue() .ToProcessor(new LoadBalancer(cache, taskScheduler)) .ToProcessor(new LastSentRecorder(systemTime)) .ToProcessor(authenticationSessionAttacherFactory.Create(schema.SubscriberAddress)) .ToEndPoint(messageSender); }
SendMessageCache CreateCache(SubscriberSendChannelSchema schema) { return messageCacheFactory.BuildSendCache(PersistenceUseType.SubscriberSend, schema.SubscriberAddress, schema); }
static void NotifySubscriberSendChannelBuilt(SubscriberSendChannelSchema schema) { Messenger.Send(new SubscriberSendChannelBuilt { CacheAddress = schema.SubscriberAddress, SubscriberAddress = schema.SubscriberAddress, PublisherAddress = schema.FromAddress }); }