Nacos注册中心
# 1 核心链路图

# 2 阅读备忘
# 2.1 核心流程理解
服务注册
客户端服务启动阶段,通过
spring.factories的方式去加载Nacos相关自动配置类,这些配置类最终执行的动作是:
定时调用Nacos服务端接口
/v1/ns/instance/beatPUT方式来判断实例是否已注册,如果已注册,则更新实例的健康状态为true,如果未注册,则注册该实例。调用Nacos服务端接口
/v1/ns/instancePOST方式来进行实例注册,注册实例时会先构建好注册表,将实例更新到注册表中。同时会定时5s检查服务的健康状态,如果超过15s没有收到服务的心跳查询,则将健康状态置为false,超过30s没有收到心跳,则直接剔除该实例。服务发现
第一次调用其他服务接口时触发,通过查询本地缓存获取实例信息,如果缓存为空,则调用Nacos服务端接口
/v1/ns/instance/listGET方式获取。另外起一个定时任务,每隔1秒调用一次服务端接口获取实例信息更新到本地缓存。
# 2.2 技巧学习
Nacos服务端源码中多次使用异步任务的方式来提高操作性能。
先把要执行的任务丢进阻塞队列
ArrayBlockingQueue,另外一个线程在服务启动后不断从队列中获取任务消费。Nacos更新注册表时,采用
CopyOnWrite思想,以此来避免并发读写冲突。更新前先把旧数据复制一份,在旧数据基础上更改完后再全部替换掉原先的数据。
Nacos客户端启动时通过实现
ApplicationListener<WebServerInitializedEvent>接口来实现事件回调,tomcat启动后触发WebServerInitializedEvent事件,调用onApplicationEvent()方法。