public void start() {
        taskExecutor = Executors.newSingleThreadScheduledExecutor(
                new ThreadFactory() {
                    @Override
                    public Thread newThread(Runnable r) {
                        Thread thread = new Thread(r, "Eureka-PeerNodesUpdater");
                        thread.setDaemon(true);
                        return thread;
                    }
                }
        );
        try {
            updatePeerEurekaNodes(resolvePeerUrls());
            Runnable peersUpdateTask = new Runnable() {
                @Override
                public void run() {
                    try {
                        updatePeerEurekaNodes(resolvePeerUrls());
                    } catch (Throwable e) {
                        logger.error("Cannot update the replica Nodes", e);
                    }

                }
            };
            taskExecutor.scheduleWithFixedDelay(
                    peersUpdateTask,
                    serverConfig.getPeerEurekaNodesUpdateIntervalMs(),
                    serverConfig.getPeerEurekaNodesUpdateIntervalMs(),
                    TimeUnit.MILLISECONDS
            );
        } catch (Exception e) {
            throw new IllegalStateException(e);
        }
        for (PeerEurekaNode node : peerEurekaNodes) {
            logger.info("Replica node URL:  {}", node.getServiceUrl());
        }
    }
@Test
    public void testReloadWithNoPeerChange() throws Exception {
        // Start
        peerEurekaNodes.withPeerUrls(PEER_EUREKA_URL_A);
        peerEurekaNodes.start();

        PeerEurekaNode peerNode = getPeerNode(PEER_EUREKA_URL_A);
        assertThat(peerEurekaNodes.awaitNextReload(60, TimeUnit.SECONDS), is(true));
        assertThat(getPeerNode(PEER_EUREKA_URL_A), is(equalTo(peerNode)));
    }