Ejemplo n.º 1
0
        public LoadBalancer(SendMessageCache cache, ITaskScheduler taskScheduler)
        {
            this.cache = cache;
            this.taskScheduler = taskScheduler;
            unsentMessages = new ConcurrentQueue<MessagePayload>();
            sentMessages = new ConcurrentDictionary<Guid, MessagePayload>();
            
            Messenger.Register<MessageRemovedFromCache>(m => FreeUpSlot(m.MessageId, m.Address, m.UseType));

            SendFeelerMessages();
        }
 void BuildPipeline(SubscriptionRequestChannelSchema schema, SendMessageCache cache)
 {
     MessagePipelineBuilder.Build()
         .With(new SubscriptionRequestor(schema))
         .ToProcessor(new MessageAddresser(schema.SubscriberAddress, schema.PublisherAddress))
         .ToProcessor(new SendChannelMessageCacher(cache))
         .ToMessageRepeater(cache, systemTime, taskRepeater, ConstantTimeRepeatStrategy.EveryTenSeconds())
         .ToProcessor(new SendChannelMessageCacheUpdater(cache))
         .ToProcessor(new PersistenceSourceRecorder())
         .Pump()
         .ToProcessor(new LastSentRecorder(systemTime))
         .ToProcessor(authenticationSessionAttacherFactory.Create(schema.PublisherAddress))
         .ToEndPoint(messageSender);
 }
 void BuildPipeline(PublisherChannelSchema schema, SendMessageCache cache, Publisher publisherEndpoint)
 {
     MessagePipelineBuilder.Build()
         .WithBusPublishTo(new MessageFilter(schema.MessageFilterStrategy))
         .ToProcessor(new MessageHookRunner<object>(schema.Hooks))
         .ToConverter(new MessagePayloadPackager(serialiser))
         .ToProcessor(new MessageHookRunner<MessagePayload>(schema.PostPackagingHooks))
         .ToProcessor(new Sequencer(cache))
         .ToProcessor(new SendChannelMessageCacher(cache))
         .ToSimpleMessageRepeater(cache, systemTime, taskRepeater)
         .ToProcessor(new SendChannelMessageCacheUpdater(cache))
         .ToProcessor(publisherEndpoint)
         .ToEndPoint(new MessageDecacher(cache));
 }
 void BuildPipeline(PointToPointSendChannelSchema schema, SendMessageCache cache)
 {
     MessagePipelineBuilder.Build()
         .WithBusSendTo(new MessageFilter(schema.FilteringStrategy))
         .ToProcessor(new BatchPackager())
         .ToConverter(new MessagePayloadPackager(serialiser))
         .ToProcessor(new Sequencer(cache))
         .ToProcessor(new MessageAddresser(schema.FromAddress, schema.ReceiverAddress))
         .ToProcessor(new SendChannelMessageCacher(cache))
         .ToMessageRepeater(cache, systemTime, taskRepeater, schema.RepeatStrategy)
         .ToProcessor(new SendChannelMessageCacheUpdater(cache))
         .ToProcessor(new SequenceOriginRecorder(cache))
         .ToProcessor(new PersistenceSourceRecorder())
         .Queue()
         .ToProcessor(new MessageExpirer(schema.ExpiryAction, cache, schema.ExpiryStrategy))
         .ToProcessor(new LoadBalancer(cache, taskScheduler))
         .ToProcessor(new LastSentRecorder(systemTime))
         .ToProcessor(authenticationSessionAttacherFactory.Create(schema.ReceiverAddress))
         .ToEndPoint(messageSender);
 }
 void RegisterCacheWithAcknowledgementHandler(SendMessageCache cache)
 {
     acknowledgementHandler.RegisterCache(cache);
 }
 public SendChannelMessageCacher(SendMessageCache messageCache)
 {
     Contract.Requires(messageCache != null);
     this.messageCache = messageCache;
 }
 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);
 }
 void BuildPipeline(IMessageProcessor<object, object> startPoint, ReplySendChannelSchema schema, EndpointAddress senderAddress, SendMessageCache cache)
 {
     MessagePipelineBuilder.Build()
         .With(startPoint)
         .ToProcessor(new MessageHookRunner<object>(schema.Hooks))
         .ToProcessor(new BatchPackager())
         .ToConverter(new MessagePayloadPackager(serialiser))
         .ToProcessor(new ReplyCorrelationApplier(correlationLookup))
         .ToProcessor(new Sequencer(cache))
         .ToProcessor(new MessageAddresser(schema.FromAddress, senderAddress))
         .ToProcessor(new SendChannelMessageCacher(cache))
         .ToMessageRepeater(cache, systemTime, taskRepeater, schema.RepeatStrategy)
         .ToProcessor(new SendChannelMessageCacheUpdater(cache))
         .ToProcessor(new SequenceOriginRecorder(cache))
         .ToProcessor(new PersistenceSourceRecorder())
         .Queue()
         .ToProcessor(new MessageExpirer(schema.ExpiryAction, cache, schema.ExpiryStrategy))
         .ToProcessor(new LoadBalancer(cache, taskScheduler))
         .ToProcessor(new LastSentRecorder(systemTime))
         .ToProcessor(authenticationSessionAttacherFactory.Create())
         .ToEndPoint(messageSender);
 }
 public SequenceOriginRecorder(SendMessageCache messageCache)
 {
     Contract.Requires(messageCache != null);
     this.messageCache = messageCache;
 }