INTERNAL API Factory to create a configured IMetricsCollector.
        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
        }