![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Nacos源码
文章平均质量分 79
每天都要进步一点点
工作日常技术学习、积累、总结
展开
-
十四、Nacos源码系列:Nacos配置发布原理
一般情况下,我们是通过Nacos提供的web控制台登录,然后通过界面新增配置信息。后续客户端只要配置了对应的NameSpace,group,dataId就可以在客户端获取到对应的配置信息。既然这样,服务端肯定会存储我们在web控制台配置的配置信息。web控制台发布配置的入口肯定也是一个controller接口:com.alibaba.nacos.config.server.controller.ConfigController#publishConfig。// 内容加密} else {原创 2024-03-13 17:21:16 · 1108 阅读 · 0 评论 -
十三、Nacos源码系列:Nacos配置中心原理(五)- 总结
原创 2024-03-01 15:55:52 · 181 阅读 · 0 评论 -
十二、Nacos源码系列:Nacos配置中心原理(四)- RefreshEvent 事件处理
回到refreshAll()方法,在 refreshAll()中调用 super.destroy()方法时会将该 scope 的这些 Bean 都销毁掉,在下次 get()的时候会重新新触发spring的createBean,创建出一个新的bean对象,新创建的 Bean 就有了我们最新的配置。我们继续回到前面处理RefreshEvent事件的ContextRefresher#refresh()方法,接着会有一步 refreshAll 的操作,会调用父类的destroy()方法。原创 2024-03-01 15:52:48 · 578 阅读 · 0 评论 -
十一、Nacos源码系列:Nacos配置中心原理(三)- 配置热更新
从源码可以看到,NacosConfigManager 中会进行一个 ConfigService 单例对象的创建,创建流程最终会委托给 ConfigFactory,使用反射方式创建一个 NacosConfigService 的实例对象,NacosConfigService 是一个很核心的类,配置的获取,监听器的注册都需要经此。上面章节我们讲了服务启动的时候从远程 Nacos 服务端拉到配置,以及服务启动后对需要支持热更新的配置都注册了一个监听器,这个章节我们来说下配置变动后具体是怎么处理的。原创 2024-02-20 11:39:32 · 624 阅读 · 0 评论 -
十、Nacos源码系列:Nacos配置中心原理(二)- 注册配置监听器
在spring-cloud-starter-alibaba-nacos-config-2.2.9.RELEASE.jar的META-INF/spring.factories文件中,除了引入了NacosConfigBootstrapConfiguration自动配置类,还引入了NacosConfigAutoConfiguration这个自动配置类,这个配置类就负责配置监听器的注册。到这里,在服务启动后向每一个需要支持热更新的配置都注册了一个监听器,用来监听远程配置的变动,以及做相应的处理。原创 2024-02-19 14:16:02 · 661 阅读 · 0 评论 -
九、Nacos源码系列:Nacos配置中心原理(一)- SpringCloud应用启动时拉取配置
至此,在项目启动的时候(上下文准备阶段)通过NacosPropertySourceLocator就拉取到了远程 Nacos 中的配置信息,并且封装成 NacosPropertySource对象,然后PropertySourceBootstrapConfiguration依靠ApplicationContextInitializer机制(容器刷新之前支持一些自定义初始化工作),将前面封装好的NacosPropertySource对象放到了 Spring 的环境变量Environment 中。原创 2024-02-19 11:16:44 · 1303 阅读 · 0 评论 -
八、Nacos源码系列:Nacos集群数据同步
在Nacos以集群模式运行时,当Nacos服务器收到服务注册请求后,发生了ClientEvent.ClientChangedEvent事件,就会触发将注册的服务信息同步给集群中的其他Nacos-server节点。同步时,会涉及到一个负责节点和非负责节点。原创 2024-02-07 16:49:16 · 1058 阅读 · 0 评论 -
七、Nacos源码系列:Nacos服务发现
/ 调用栈如下:// getInstances(serviceId)方法最终会调用NacosNamingService#selectInstances()获取实例信息。// 集群名称,使用逗号分隔// 是否订阅,默认是订阅的/*** 1.从缓存中获取ServiceInfo* key: groupName@@serviceName 或者 groupName@@serviceName@@clusterString*/原创 2024-02-07 16:06:13 · 2357 阅读 · 0 评论 -
六、Nacos源码系列:Nacos健康检查
/ 启动了一个定时任务,无延迟,每隔5s执行一次// 具体就是执行ExpiredClientCleaner.run()方法@Override// 判断客户端是否超时if (null!// 超时连接处理客户端释放连接事件、客户端断开连接事件。原创 2024-02-01 17:16:14 · 2065 阅读 · 1 评论 -
五、Nacos源码系列:Nacos服务注册总结
总结图:一张图超过csdn上传文件最大限制了,只能分为几张图片:原创 2024-01-29 11:12:03 · 129 阅读 · 0 评论 -
四、Nacos源码系列:Nacos服务注册流程(三)
接下来我们看下抽象的任务引擎类AbstractNacosTaskExecuteEngine。它有两个私有变量,分别是ConcurrentHashMap类型的taskProcessors,这个是对处理类NacosTaskProcessor的缓存。另一个是NacosTaskProcessor,这是一个默认的处理类,如果处理类缓存中不存在的话,就用这个处理类去处理。其源码如下:/*** 对处理类NacosTaskProcessor的缓存* key: Service服务。原创 2024-01-26 17:44:36 · 1050 阅读 · 0 评论 -
三、Nacos源码系列:Nacos服务注册流程(二) - NotifyCenter事件发布机制
NotifyCenter是Nacos中的统一事件通知中心。// 典型的单例模式(饿汉式)通过源码,我们可以发现,NotifyCenter使用了单例,说明整个进程共享这个实例,所有的内部变量归所有线程共享,我们需要考虑并发问题。也就是操作内部变量的时候,需要加锁去操作,防止其它线程也同时操作导致出错。/*** ringBufferSize/shareBufferSize这两个变量因为在静态块中初始化,然后并没有改变其初始值,所以不需要特殊处理*//*** EventPublisher工厂。原创 2024-01-24 17:10:38 · 1079 阅读 · 0 评论 -
二、Nacos源码系列:Nacos服务注册流程(一)
本篇文章中,我们从Nacos客户端自动注册在何时触发开始,然后分析了客户端向Nacos服务端提交服务注册请求,最后到Nacos服务端处理这个注册请求,整个流程大概梳理了一下,下一篇文章,我们将会详细分析NotifyCenter这个事件-发布机制的原理,然后继续分析服务端处理注册请求过程中涉及到的后续流程处理。原创 2024-01-17 17:19:01 · 1865 阅读 · 0 评论 -
一、Nacos源码系列:源码环境搭建
使用git clone https://github.com/alibaba/nacos命令将源码clone下来,或者先fork到自己的GitHub,然后clone到本地,这样阅读的时候,可以添加一些注释,提交到自己的GitHub上面,方便后续再次回来查看时快速回想起代码的含义。至此,Nacos源码阅读的环境就搭建好了,后续我们会进行服务注册、服务发现、以及服务心跳等功能进行分析。截止到编写这篇文章,Nacos的最新版本为2.3.0,为了学习,我们也是拿最新的源码来学习。原创 2024-01-17 16:34:19 · 1452 阅读 · 0 评论