public ClusterMetricsCollector(IActorRef publisher) { _publisher = publisher; _cluster = Cluster.Get(Context.System); Collector = MetricsCollector.Get(Context.System.AsInstanceOf <ExtendedActorSystem>(), _cluster.Settings); LatestGossip = MetricsGossip.Empty; Nodes = ImmutableHashSet.Create <Address>(); _metricsCancelable = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable( _cluster.Settings.PeriodicTasksInitialDelay.Max(_cluster.Settings.MetricsInterval), _cluster.Settings.MetricsInterval, Self, InternalClusterAction.MetricsTick.Instance, Self); _gossipCancelable = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable( _cluster.Settings.PeriodicTasksInitialDelay.Max(_cluster.Settings.GossipInterval), _cluster.Settings.GossipInterval, Self, InternalClusterAction.GossipTick.Instance, Self); Receive <InternalClusterAction.GossipTick>(tick => Gossip()); Receive <InternalClusterAction.MetricsTick>(tick => Collect()); Receive <MetricsGossipEnvelope>(envelope => ReceiveGossip(envelope)); Receive <ClusterEvent.CurrentClusterState>(state => ReceiveState(state)); Receive <ClusterEvent.MemberUp>(up => AddMember(up.Member)); Receive <ClusterEvent.MemberRemoved>(removed => RemoveMember(removed.Member)); Receive <ClusterEvent.MemberExited>(exited => RemoveMember(exited.Member)); Receive <ClusterEvent.UnreachableMember>(member => RemoveMember(member.Member)); Receive <ClusterEvent.ReachableMember>(member => { if (member.Member.Status == MemberStatus.Up) { AddMember(member.Member); } }); Receive <ClusterEvent.IMemberEvent>(@event => { }); //not interested in other types of member event }