protected MessageProcessor( DispatcherQueueSetting setting, IReliableLog <TMessage> inputMessageQueue, IReliableLog <OutputMessage> outputMessageQueue, IMessageFilteringEngine <TMessage> filteringEngine, IResultReporter resultReporter) : base(nameof(MessageProcessor <TMessage>)) { this.setting = setting; this.inputMessageQueue = inputMessageQueue; this.outputMessageQueue = outputMessageQueue; this.filteringEngine = filteringEngine; this.resultReporter = resultReporter; this.processorComponents = new ComponentManager(this.setting.Name, "MessageProcessorContainer"); this.processorComponents.Faulted += (s, e) => this.Fault(e.Exception); this.messageDispatcher = MessageDispatcher.Create( this.setting, this.outputMessageQueue, this.resultReporter); this.processorComponents.Add(this.messageDispatcher); this.messagePump = MessagePump <TMessage> .Create( this.setting, this.inputMessageQueue, this.filteringEngine, this.messageDispatcher); this.processorComponents.Add(this.messagePump); }
protected MessageDispatcher( DispatcherQueueSetting setting, IReliableLog <OutputMessage> outputMessageQueue, IResultReporter resultReporter) : base(nameof(MessageDispatcher)) { this.setting = setting; this.outputMessageQueue = outputMessageQueue; this.resultReporter = resultReporter; this.pushWorkers = new List <IPushWorker>(); this.random = new ThreadSafeRandom(); this.dispatcherComponents = new ComponentManager(this.setting.Name, "MessageDispatcherContainer"); this.dispatcherComponents.Faulted += (s, e) => this.Fault(e.Exception); for (var i = 0; i < this.setting.PushWorkerCount; ++i) { var pushWorker = PushWorker.Create( this.setting, this.outputMessageQueue, this, this.resultReporter); this.pushWorkers.Add(pushWorker); this.dispatcherComponents.Add(pushWorker); } }
public static IMessageDispatcher Create( DispatcherQueueSetting setting, IReliableLog <OutputMessage> outputMessageQueue, IResultReporter resultReporter) { return(new MessageDispatcher( setting, outputMessageQueue, resultReporter)); }
public MessageDispatcher(StatefulServiceContext context) : base(context) { this.components = new ComponentManager(nameof(MessageDispatcher), "RootContainer"); var partitionSetting = DispatcherPartitionSetting.Create(); var resultReporter = ResultReporter.Create(); var inputMessageFilteringEngine = InputMessageFilteringEngine.Create(partitionSetting.InstantQueueSetting, resultReporter); // Delayed Queue IReliableLog <OutputMessage> nextOutputReliableLog = null; for (var i = partitionSetting.DelayedQueueSettings.Count - 1; i >= 0; i--) { var setting = partitionSetting.DelayedQueueSettings[i]; var outputMessageFilteringEngine = OutputMessageFilteringEngine.Create(setting, inputMessageFilteringEngine, resultReporter); var outputReliableLog = ReliableLog <OutputMessage> .Create(setting, this.StateManager); outputReliableLog = new DelayedReliableLog(outputReliableLog); var outputMessageProcessor = MessageProcessor <OutputMessage> .Create( setting, outputReliableLog, nextOutputReliableLog ?? outputReliableLog, outputMessageFilteringEngine, resultReporter); this.components.Add(outputMessageFilteringEngine); this.components.Add(outputReliableLog); this.components.Add(outputMessageProcessor); nextOutputReliableLog = outputReliableLog; } // Instant Queue var inputReliableLog = ReliableLog <InputMessage> .Create(partitionSetting.InstantQueueSetting, this.StateManager); var inputMessageProcessor = MessageProcessor <InputMessage> .Create( partitionSetting.InstantQueueSetting, inputReliableLog, nextOutputReliableLog, inputMessageFilteringEngine, resultReporter); this.components.Add(inputMessageFilteringEngine); this.components.Add(inputReliableLog); this.components.Add(inputMessageProcessor); this.components.Add(resultReporter); this.inputReliableLog = inputReliableLog; this.resultReporter = resultReporter; MessageDispatcher.AppName = context.CodePackageActivationContext.ApplicationTypeName; }
public static IMessagePump Create( DispatcherQueueSetting setting, IReliableLog <TMessage> messageQueue, IMessageFilteringEngine <TMessage> filteringEngine, IMessageDispatcher messageDispatcher) { return(new MessagePump <TMessage>( setting, messageQueue, filteringEngine, messageDispatcher)); }
protected MessagePump( DispatcherQueueSetting setting, IReliableLog <TMessage> messageQueue, IMessageFilteringEngine <TMessage> filteringEngine, IMessageDispatcher messageDispatcher) : base(nameof(MessagePump <TMessage>)) { this.setting = setting; this.messageQueue = messageQueue; this.filteringEngine = filteringEngine; this.messageDispatcher = messageDispatcher; this.checkpointQueue = new ConcurrentQueue <CheckpointInfo>(); }
protected PushWorker( DispatcherQueueSetting setting, IReliableLog <OutputMessage> outputMessageQueue, IMessageDispatcher messageDispatcher, IResultReporter resultReporter) : base(nameof(PushWorker)) { this.setting = setting; this.outputMessageQueue = outputMessageQueue; this.messageDispatcher = messageDispatcher; this.pushTaskAvailableSignal = new AsyncSignal(SignalWaitTime); this.messageQueue = new ConcurrentQueue <PushTaskInfo>(); this.resultReporter = resultReporter; }
public static IMessageProcessor <TMessage> Create( DispatcherQueueSetting setting, IReliableLog <TMessage> inputMessageQueue, IReliableLog <OutputMessage> outputMessageQueue, IMessageFilteringEngine <TMessage> filteringEngine, IResultReporter resultReporter) { return(new MessageProcessor <TMessage>( setting, inputMessageQueue, outputMessageQueue, filteringEngine, resultReporter)); }
public DelayedReliableLog(IReliableLog <OutputMessage> reliableLog) : base(nameof(DelayedReliableLog)) { this.reliableLog = reliableLog; }