Nacos原理03-配置中心

用例图

 

 

 

ClientWorker类的构造方法中,直接启动了一个延时任务。

public ClientWorker(final HttpAgent agent, final ConfigFilterChainManager configFilterChainManager,
            final Properties properties) {
        this.agent = agent;
        this.configFilterChainManager = configFilterChainManager;
        
        // Initialize the timeout parameter
        
        init(properties);
        
        this.executor = Executors.newScheduledThreadPool(1, new ThreadFactory() {
            @Override
            public Thread newThread(Runnable r) {
                Thread t = new Thread(r);
                t.setName("com.alibaba.nacos.client.Worker." + agent.getName());
                t.setDaemon(true);
                return t;
            }
        });
        
        this.executorService = Executors
                .newScheduledThreadPool(Runtime.getRuntime().availableProcessors(), new ThreadFactory() {
                    @Override
                    public Thread newThread(Runnable r) {
                        Thread t = new Thread(r);
                        t.setName("com.alibaba.nacos.client.Worker.longPolling." + agent.getName());
                        t.setDaemon(true);
                        return t;
                    }
                });
        
        this.executor.scheduleWithFixedDelay(new Runnable() {
            @Override
            public void run() {
                try {
                    checkConfigInfo();
                } catch (Throwable e) {
                    LOGGER.error("[" + agent.getName() + "] [sub-check] rotate check error", e);
                }
            }
        }, 1L, 10L, TimeUnit.MILLISECONDS);
    }

 

这个延时任务的作用就是定时调用server获取配置内容的接口,并更新缓存在客户端的配置内容。

这个延时任务的checkConfigInfo()方法里起了一个线程:LongPollingRunnable。在这个线程里,会调用到一个getServerConfig()方法,传参是dataId、group、tenant和超时时间(3秒),这个方法中会请求服务端的接口:/configs,然后根据返回的HTTP码做不一样的返回——200则拼装完整的结果,404则拼装空的结果,409和403或者其他都抛出特有的异常,若正常返回,则更新客户端的配置,并立即执行下一次LongPollingRunnable线程,若抛出了异常,则延时执行下一次,延时的时间由配置项LongPollingRunnable决定,默认是2000ms。

参考资料

posted @ 2022-05-07 17:28  蓝瓶的真好喝  阅读(108)  评论(0编辑  收藏  举报