public PubSubWatchDog(ILogger logger, IStateManager stateManager, IPubSubFactory publisherFactory, CancellationToken cancellationToken, IEventAggregator eventAggregator) { _logger = logger; _stateManager = stateManager; _eventAggregator = eventAggregator; _publisher = publisherFactory.GetPublisher(cancellationToken, logger, nameof(IWatchDogMessage)); _subscriber = publisherFactory.GetSubscriber(cancellationToken, logger, nameof(IWatchDogMessage)); _serializer = SerializersFactory.Instance.GetSerializer(typeof(GroupMessage)); _subscriber.Subscribe(nameof(ProcessRemovedWatchDogMessage), ProcessRemovedFromMaster); _subscriber.Subscribe(nameof(TriggerProducerWatchDogMessage), ProcessVolumeChangedFromMaster); _healthSub = _eventAggregator.Subscribe4Broadcast <HealthMessage>(PublishHealth); }
internal override void OnStart() { base.OnStart(); _slaveMessageSubscriber = _pubSubFactory.GetSubscriber(Interrupter.Token, Logger, nameof(IWatchDogMessage)); //_slaveMessageSubscriber.Subscribe(nameof(IWatchDogMessage), HandleSlaveMessages); _slaveMessageSubscriber.Subscribe(nameof(GroupMessage), s => HandleWatchDogMessage <GroupMessage>(s, message => { message.SetGroupEntity(_stateManager.GetGroupEntity(message.GroupId)); if (message.Action == GroupActions.Stop) { Logger.Info($"Received group stop from slave for Id {message.Group.Id}"); CheckSyncGroup(message.Group); return(true); } return(false); })); _slaveMessageSubscriber.Subscribe(nameof(ProcessInputIdleWatchDogMessage), s => HandleWatchDogMessage <ProcessInputIdleWatchDogMessage>(s)); _slaveMessageSubscriber.Subscribe <ProcessGroupAddedMessage>(s => { _lock.EnterReadLock(); try { if (_runningGroups.ContainsKey(s.GroupId)) { Logger.Trace("Watchdog New Group {groupId} already processing. dropping message.", s.GroupId); return; } Robustness.Instance.SafeCall(() => { HandleNewGroup(s.GroupId); }); } finally { _lock.ExitReadLock(); } }); _publisher = _pubSubFactory.GetPublisher(Interrupter.Token, Logger, nameof(IWatchDogMessage)); }
internal override void OnStart() { base.OnStart(); _publisher = _pubSubFactory.GetPublisher(Interrupter.Token, Logger, dashboardChannel); _subscriber = _pubSubFactory.GetSubscriber(Interrupter.Token, Logger, dashboardChannel); _subscriber.Subscribe(statusRequest, OnStatusRequest); }