文章目录

  • 前提介绍
  • Nacos源码下载
  • Nacos客户端源码
  • Spring Cloud Starter Nacos 源码
  • Nacos服务端源码

前提介绍

服务注册与发现作用主要是为了更好的管理众多的服务,不论Nacos还是Zookeeper、Eureka,作为注册中心都是为了解决以下两个问题:

  1. 屏蔽、解耦服务之间相互依赖的细节。服务之间的远程调用必须要知道IP、端口信息,一旦这些信息改变,调用方都需要更新,依赖性太强。
  2. 微服务架构中,服务众多、服务之间的相互依赖错综复杂,无论是服务停止、上线,还是扩容,都需要尽快通知调用方。注册中心作用就是对微服务进行动态配置,解决这一问题。

Nacos作为注册中心其本质是作为服务端,提供接口进行客户端实例的注册存储实例信息,通过心跳机制保证实例的存活,实例通过服务端发现获取其他实例信息。

本文通过Nacos源码了解服务注册与发现原理。

Nacos源码下载

下载Nacos源码

将源码导入Idea中,工程结构如下

逻辑架构如下图

Nacos客户端源码

服务实例是如何注册到Nacos的?通过源码提供的示例NamingExample.java可以看到一个服务注册到Nacos只需几行代码

NamingService作为注册中心客户端的接口,包括注册实例、注销实例、获取实例等接口,也就是服务注册/发现的功能。通过createNamingService方法可以看到其实现为NacosNamingService

NacosNamingService.java中可以看到registerInstance的具体实现。通过代码追踪可以看到最终通过clientProxy去调用注册服务接口。

这个clientProxy是在NacosNamingService实例的时候进行了声明

NamingClientProxyDelegate.java中可以看到有grpc和http两种协议去和Nacos进行通信。

如果注册为临时实例使用grpc,永久实例使用http,在调用时会根据实例的属性选择。

所以最终向Nacos服务端注册服务、注销服务、获取实例列表等通过NamingGrpcClientProxy.javaNamingHttpClientProxy.java调用。整体的链路是比较简单清晰的。

Spring Cloud Starter Nacos 源码

通过上面的示例可以看到通过简单的几行代码就可以实现服务注册、发现等功能,但是我们在使用Nacos时通常基于Spring Cloud结合使用。一般在引入相关依赖,添加几个配置之后会发现服务自动注册到Nacos了,这是如何实现的?

在引入nacos注册发现依赖后可以看到该包下面的spring.factories文件,根据Spring Boot自动装配原理,首先会加载EnableAutoConfiguration对应的类,服务注册就找NacosServiceRegistryAutoConfiguration这个类。

NacosServiceRegistryAutoConfiguration类中的这些Bean会交给Spring管理,服务注册是通过NacosAutoServiceRegistration注入实现。

NacosAutoServiceRegistration 继承了AbstractAutoServiceRegistration,而AbstractAutoServiceRegistration实现了ApplicationListener,所以在项目启动的时候会执行onApplicationEvent

当调用start()方法后最终会指向NacosServiceRegistry的register方法

可以看到register方法中的代码最终还是会通过NamingService进行服务注册,也就是服务通过API注册时的流程。

Nacos服务端源码

当客户端发送请求后,Nacos服务端接收并响应,在naming项目中有个controllers包,用来接收客户端的请求

InstanceController是实例相关的接口,其中register方法把接收到的信息解析成instance,然后调用registerInstance方法完成注册,该方法是服务端注册的核心

在nacos2.0以后新增了Client模型,一个服务gRPC长连接对应一个Client,用来管理服务注册发布、服务心跳、服务订阅等操作

通过clientOperationService的实现EphemeralClientOperationServiceImpl调用registerInstance将服务与Client、Nacos服务三者绑定,完成注册。

Nacos服务注册与发现源码剖析相关推荐

  1. Nacos服务注册与发现源码(一)之gRPC协议的实例注册

    Nacos核心功能点 服务注册:Nacos Client会通过发送请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址.端口等信息.Nacos Server接收到注册请求 ...

  2. 微服务学习之Nacos(服务注册与发现)

    微服务系列 1.Nacus 服务搭建及使用 2.Nacos 配置中心 3.Nacos 服务注册与发现之OpenFeign服务间调用 4.Spring Security & Oauth2 认证授 ...

  3. SpringCloud-Alibaba之Nacos服务注册和发现

    SpringCloud-Alibaba之Nacos服务注册和发现 在这之前我们需要在 windows 或者 linux - 搭建Nacos服务 https://nacos.io/zh-cn/docs/ ...

  4. Nacos 服务注册与发现原理分析

    Nacos 另一个非常重要的特性就是服务注册与发现,说到服务的注册与发现相信大家应该都不陌生,在微服务盛行的今天,服务是非常重要的,而在 Nacos 中服务更被称为他的一等公民. Nacos 支持几乎 ...

  5. SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载)

    场景 SpringCloud学习之运行第一个Eureka程序: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/90611451 S ...

  6. 3.Spring Cloud Alibaba教程:Nacos服务注册与发现

    概要 官网地址:Nacos官网和帮助文档 Nacos安装:Linux安装Nacos1.3.1(还没安装的先看这篇文章安装) Nacos主要作用:服务注册与发现.配置管理 本篇主要介绍的是服务注册与发现 ...

  7. Nacos服务注册与发现---Nacos简介以及原理

    1. 什么是Nacos ​ ​  ​      ​  Nacos是SpringCloud Alibaba的一个服务治理的一个重要组件,英文全称Dynamic Naming and Configurat ...

  8. Nacos服务注册与发现的2种实现方法!

    作者 | 磊哥 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) Spring Cloud Alibaba 技术体系中的 Nacos,提供了两个重要 ...

  9. Nacos服务注册与发现——服务发现

    1.概览 1.1.什么是服务发现 在微服务架构中,整个系统会按职责能力划分为多个服务,通过服务之间协作来实现业务目标.这样在我们的代码中免不了要进行服务间的远程调用,服务的消费方要调用服务的生产方,为 ...

最新文章

  1. Docker + Intellij IDEA,提升 10 倍生产力!
  2. TomCat服务器和Web应用
  3. 【LCT】城市旅行(luogu 4842/金牌导航 LCT-3)
  4. 字符内存转成字符串_字符串内存内部
  5. stotybord如何添加子视图_SQL复杂查询-子查询
  6. 四大基本反应类型的关系_死神:漫画已完结,却依旧没有填坑,尸魂界四大贵族都有谁?...
  7. faststart可以卸载吗_你的手机你做主!免 ROOT 卸载安卓手机预装APP
  8. linux之grep使用技巧
  9. JavaScript创建对象的三种方式之利用字面量创建对象及使用方法(1)
  10. 字符串属性和函数的使用
  11. 华硕升级bios的问题
  12. Laravel 源码解读
  13. matlab海龟交易策略,海龟交易策略
  14. 西门子200smart自创库与说明
  15. keil4单片机串口通信
  16. 使用VIM是一种信仰
  17. 母牛的故事 1243ACM实验题
  18. 关于“/usr/include/openssl/bn.h 288 error: parse error before BN_ULONG解决方法
  19. 三元运算符 php_使用PHP三元运算符
  20. php 源生 命令行执行

热门文章

  1. linux配置Jdk1.8
  2. NIPS 十大机器学习精选论文
  3. 大一计算机考试简单拿分点,大一计算机考试重点.doc
  4. ORA-12541 无监听程序解决方案
  5. 曾经流行的计算机病毒及危害,主流计算机病毒有什么危害
  6. openstack对接ceph存储
  7. Android 开发 系统组件集合
  8. Java类似相机中图像处理(上)
  9. Win正确关闭nginx服务(不要采坑了!!!)
  10. 【微论坛系统v2.01】轻型论坛模块+可卸载式安装+采用layui自适应模板+可设置是否开启签到