【个人技术经验及开发技巧分享】 【个人技术经验及开发技巧分享】
首页
  • 操作系统初识
  • JAVA基础
  • JVM
  • 开发框架
  • Redis
  • Zookeeper
  • 消息中间件
  • 持久化
  • 算法
  • 网络
  • 系统架构
  • 并发编程
  • 框架
  • 开发杂货
  • 线上排查
  • 技巧备忘
  • 部署指南
  • 版本管理
  • 工作流程
  • 发版流程
  • 友情链接
  • 网站备忘
  • 在线工具
  • 学习
  • 各种云
  • 应用下载

Louis

首页
  • 操作系统初识
  • JAVA基础
  • JVM
  • 开发框架
  • Redis
  • Zookeeper
  • 消息中间件
  • 持久化
  • 算法
  • 网络
  • 系统架构
  • 并发编程
  • 框架
  • 开发杂货
  • 线上排查
  • 技巧备忘
  • 部署指南
  • 版本管理
  • 工作流程
  • 发版流程
  • 友情链接
  • 网站备忘
  • 在线工具
  • 学习
  • 各种云
  • 应用下载
  • 并发编程

  • 框架

    • Spring
    • SpringBoot启动流程
    • Nacos注册中心
      • 1 核心链路图
      • 2 阅读备忘
        • 2.1 核心流程理解
        • 2.2 技巧学习
    • Nacos配置中心
  • 源码阅读
  • 框架
luoxiaofeng
2022-06-22
目录

Nacos注册中心

# 1 核心链路图

processon链接

https://www.processon.com/view/link/62be8b0807912925e5f87790 (opens new window)

nacos-register

# 2 阅读备忘

# 2.1 核心流程理解

  1. 服务注册

    客户端服务启动阶段,通过 spring.factories 的方式去加载Nacos相关自动配置类,这些配置类最终执行的动作是:

    • 定时调用Nacos服务端接口 /v1/ns/instance/beat PUT方式 来判断实例是否已注册,如果已注册,则更新实例的健康状态为true,如果未注册,则注册该实例。

    • 调用Nacos服务端接口 /v1/ns/instance POST方式 来进行实例注册,注册实例时会先构建好注册表,将实例更新到注册表中。同时会定时5s检查服务的健康状态,如果超过15s没有收到服务的心跳查询,则将健康状态置为false,超过30s没有收到心跳,则直接剔除该实例。

  2. 服务发现

    第一次调用其他服务接口时触发,通过查询本地缓存获取实例信息,如果缓存为空,则调用Nacos服务端接口 /v1/ns/instance/list GET方式 获取。另外起一个定时任务,每隔1秒调用一次服务端接口获取实例信息更新到本地缓存。

# 2.2 技巧学习

  1. Nacos服务端源码中多次使用异步任务的方式来提高操作性能。

    先把要执行的任务丢进阻塞队列 ArrayBlockingQueue ,另外一个线程在服务启动后不断从队列中获取任务消费。

  2. Nacos更新注册表时,采用 CopyOnWrite 思想,以此来避免并发读写冲突。

    更新前先把旧数据复制一份,在旧数据基础上更改完后再全部替换掉原先的数据。

  3. Nacos客户端启动时通过实现 ApplicationListener<WebServerInitializedEvent> 接口来实现事件回调,tomcat 启动后触发 WebServerInitializedEvent 事件,调用 onApplicationEvent() 方法。

SpringBoot启动流程
Nacos配置中心

← SpringBoot启动流程 Nacos配置中心→

最近更新
01
SpringBoot
10-21
02
Spring
10-20
03
Sentinel
10-14
更多文章>
Copyright © 2022-2023 Louis | 粤ICP备2022060093号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式