naco源码三--服务注册源码

简介: naco源码三--服务注册源码

一. Nacos&Ribbon&Feign微服务架构图


1187916-20200722075119532-1963491123.png

架构原理


1. 微服务系统在启动时将自己注册到服务注册中心,同时对外发布 Http 接口供其它系统调用(一般都是基于Spring MVC)


2、服务消费者基于 Feign 调用服务提供者对外发布的接口,先对调用的本地接口加上注解@FeignClient,Feign会针对 加了该注解的接口生成动态代理,服务消费者会针对 Feign 生成的动态代理去调用方法时,在底层会生成Http协议格式的请求,类似 /stock/deduct?productId=100


3、Feign 最终会调用Ribbon从本地的Nacos注册表的缓存里根据服务名取出服务提供在机器的列表,然后进行负载均衡 并选择一台机器出来,对选出来的机器IP和端口拼接之前生成的url请求,生成类似调用http接口地址 http://192.168.0.60:9000/stock/deduct?productId=100,最后基于HTTPClient调用请求


二. nacos架构图


1187916-20200722080028816-1764000708.png


Nacos核心功能点

 

  • 服务注册

      Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。

      Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。

  • 服务心跳

      在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认 5s发送一次心跳。

  • 服务同步

      Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。

  • 服务发现

      服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,

      同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存


  • 服务健康检查


      Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的 healthy属性置为false(客户端服务发现时不会发现),


      如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送 心跳则会重新注册)


三. Nacos核心功能源码架构图



Nacos服务注册表结构:Map<namespace, Map<group::serviceName, Service>>

1187916-20200722081124875-1993172107.png

四. nacos服务注册源码


1187916-20200725082335950-1008037677.png


上面整体是在alibaba客户端实现的源码, 我们找到了服务注册请求的url, 那么接下来, 就要跳转到nacos服务端的源码了, 首先我们来看看那nacos服务端源码

1187916-20200726090012215-954360825.png


这是nacos的项目, 目前我们接触到了几个包


1. client包: alibaba.nacos调用nacos就是这个包里面的内容

2. console包:nacos服务器页面相关的diamante

3. distribution包:nacos服务打包后的文件就放在了distribution包中

4. example包:nacos服务的代码示例

5. naming包:这个很重要的包,我们之前经常会使用到NamingService获取服务注册发现的信息。 这个包就是服务器注册发现包。

 

下面我们来重点看一下这个包。

1187916-20200726090403592-1561548476.png

nacos本身也是使用spring-boot实现,所以项目结构和我们通常使用的spring-boot项目是一样的。


大致看一线, 看到有controllers,这个应该是项目首先应该看的。 还有healthcheck健康检查,monitor监控等等。


我们先来看controller, 我们现在的目标是服务注册,所以,看controller名字,猜到大概应该看InstanceController。


下面来验证猜测

1187916-20200726093151057-1336365637.png


看到请求的链接, 可以确定,找对地方了。


根据上面分析的大图, 我们知道我们要找的是v1/ns/instance,且请求类型是post,第一个便是

1187916-20200726093346938-1361764509.png


start/init看源码必看--非常重要

相关文章
|
SpringCloudAlibaba Java 应用服务中间件
信创迁移适配实战-SpringCloudAlibaba服务以war包部署后无法注册到Nacos
信创迁移适配实战-SpringCloudAlibaba服务以war包部署后无法注册到Nacos
1097 0
|
Java Maven 开发者
@EnableFeignClients:简化微服务间调用的艺术
@EnableFeignClients:简化微服务间调用的艺术
2185 2
|
存储 缓存 算法
python性能问题(Performance Issues)
【7月更文挑战第19天】
369 5
python性能问题(Performance Issues)
|
SQL 关系型数据库 API
SQLAlchemy模型使用
SQLAlchemy模型使用
SQLAlchemy模型使用
|
存储 数据库
zookeeper 集群环境搭建及集群选举及数据同步机制
zookeeper 集群环境搭建及集群选举及数据同步机制
428 2
|
关系型数据库 数据库 PostgreSQL
PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比
PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比
2120 1
|
存储 弹性计算 安全
你的“第二台”电脑可以是无影云电脑
无影云电脑是阿里云推出的云电脑产品,提供“无影云桌面”服务和“无影云电脑“硬件终端。无影云电脑相较于ECS远程桌面更加的简单易用,支持多端接入和多用户管理,内置应用市场,提升云办公能力,具有很多传统PC所不具有的优势。
30438 7
你的“第二台”电脑可以是无影云电脑
|
存储 安全 对象存储
用阿里云对象存储OSS搭建个人网盘或企业网盘的方法
阿里云对象存储OSS是低成本高可靠的存储服务,使用阿里云OSS对象存储搭建个人网盘或企业网盘的方法
|
XML Java 程序员
C#项目中操作Excel文件——使用NPOI库
C#项目中操作Excel文件——使用NPOI库
893 0
C#项目中操作Excel文件——使用NPOI库
|
Oracle 关系型数据库 MySQL
nacos适配达梦、人大金仓数据库
准备工作 1、下载nacos源码、编译,官网更详细 https://nacos.io/zh-cn/docs/quick-start.html 2、下载源码,按官网更详细 git地址:https://g
2424 0