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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话