springboot + springcloud + springcloudalibaba + nacos 服务注册流程图:

springboot

  

  ①WebApplicationContext

  ②start tomcat     --->  启动tomcat

  ③spring context refresh   --->  初始化spring容器

  ④发布各种事件,就是spring 事件发布

spring cloud-commons

  

  AbstractAutoServiceRegistration.java----顾名思义、完成自动注册

  ①在springboot初始化的时候也就是第③步的时候回去load

  这个抽象类是首先一个监听器;主要监听WebServerInitializedEvent的事件,在springboot项目启动的过程中④就会发布这个事件、但是这个类是抽象类,由子类去响应监听,像spring cloud这种顶级准一流项目,他永远只定义标准、抽象,由此子路老师想到一句话——程序员的能力体现在于他的抽象能力;
  ②如果一个对象想要监听spring的事件必须是一个bean;也就是必须得被spring容器管理、或者叫做被spring容器初始化;那么问题来了这个AbstractAutoServiceRegistration什么时候被初始化的呢?spring-cloud-commons\META-INF\spring.factories配置了一个 AutoServiceRegistrationAutoConfiguration;这个类中注入了AbstractAutoServiceRegistration子类NacosAutoServiceRegistration而他提供了唯一的构造方法,其中注入了ServiceRegistry的实现NacosServiceRegistry---感受一下标准的魅力吧。
  ③NacosAutoServiceRegistration和NacosServiceRegistry为什么可以注入成功?没有被扫描啊;其实这两个类不属于spring cloud项目的;是属于nacos项目的类;故而nacos会去完成这个事情;记住sc只定义标准

  ServiceRegistry.java

  spring cloud 提供的一个接口;主要是为了统一编程;该接口抽象了对注册中心的各种api;比如服务注册、服务销毁、服务更新
 

spring-cloud-alibaba

  

  spring-cloud-starter-alibaba-nacos-discovery

  这个项目是nacos为了能够和spring cloud配合工作而开发的一个starter;
  说白了就是①对springboot做扩展和②对spring cloud做实现;
  首先我们说对sc实现吧;上图说到spring cloud提供两个类;一个抽象类一个是接口;
  都在这个项目当中实现的;分别是:
    一:NacosServiceRegistry ---完成nacos的注册功能--发一个http给服务器
    二:NacosAutoServiceRegistration--- 完成自动调用nacos的注册方法
  至于上文提到的他们如何实例化的;也是在这个项目当中完成的;也就是对spring boot扩展spring.factories当中定义了一个NacosServiceRegistryAutoConfiguration;这个类当中定义了@Bean NacosAutoServiceRegistration 所以这个自动注册类能够被实例化;同时还定义了NacosRegistration,故而他能被注入到NacosAutoServiceRegistration
  spring-cloud-starter-alibaba-nacos-discovery 这个项目会自动依赖 nacos的客户端
 

至此我们来做个总结;看看每个项目的大概意图

  

  一:springboot作为项目的基本依赖;主要提供自动配置的功能、初始化容器、发布事件等等。
 
  二:sc说我很牛逼我定标准吧;既然你是微服务肯定得有注册中心;于是我提供一个接口来规范对注册中心操作的api,比如提供一个register()方法来想注册中心注册服务;可能有人会问要你规范个蛋蛋;我们不能自己定义api?当然可以,只不过sc已经对springboot做了很优秀的扩展,你如果不按照人家的规范来;那么他做的这些扩展你就用不到;你必须得自己写;可能有人会说自己写就写;有james带着我们;分分钟的事呀;首先我不确定james能写;即使他能写,写出来了spring官方肯定不会收入;那么sc对springboot做了哪些牛逼的扩展呢?比较多;不一一列举;这里需要关心的就是他会监听springboot的事件;严格意义不是他会监听;他是要求产品方自己监听事件然后完成对事件的响应;在响应事件的时候完成服务注册;注意这是他要求的。
 
  三:然后是naocs 他作为一款独立产品其实已经具备他该有的功能;比如服务注册;但是他的注册方式肯定不符合spring cloud的要求;比如他不能自动注册,比如他的注册方法不是regitster可能叫zhuce;那怎么办呢?为了能和sc苟合alibaba开发了spring-cloud-alibaba;
 
  四:spring-cloud-alibaba的组件很多;这里只说和注册有关的;首先为了迎合sc他只能开发一个类去实现sc提供的注册接口;然后在这个实现类当中调用自己的api;接着还要完成人家的自动注册功能;只能继承他提供的监听器去响应springboot的事件完成自动注册;但是这一切的前提是他自己写的这些个类必须被spring容器管理;那怎么办呢?只能对springboot做扩展;提供配置文件。
 

nacos

  NacosAutoServiceRegistration extends AbstractAutoServiceRegistration

    能够监听到WebServerInitializedEvent事件;继而做出相应调用 NacosServiceRegistry当中的register方法完成服务注册。

  NacosServiceRegistry impliments ServiceRegistry

    实现了服务中心的各种api,比如服务注册register()。

  发送http请求注册服务

    通过JDK提供的java.net包下面的提供的Http技术发送了一个htt请求,把客户端的信息发送给服务器,完成注册。
 
 
 

springcloudalibaba与nacos服务注册流程图的更多相关文章

  1. SpringCloud Alibaba Nacos 服务注册

    业务服务接入Nacos服务治理中心 启动Nacos访问地址为:http://101.200.201.195:8848/nacos/ 创建bom工程用于管理依赖(下方附加源码地址) 准备工作完成后开始接 ...

  2. nacos服务注册源码解析

    1.客户端使用 compile 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2.2.3.RELEASE' compi ...

  3. 2021升级版微服务教程4—Nacos 服务注册和发现

    2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 默认文件1610014380163 教程全目录「含视 ...

  4. Nacos 服务注册的原理

    Nacos 服务注册需要具备的能力: 服务提供者把自己的协议地址注册到Nacos server 服务消费者需要从Nacos Server上去查询服务提供者的地址(根据服务名称) Nacos Serve ...

  5. Spring Cloud Alibaba Nacos 服务注册与发现功能实现!

    Nacos 是 Spring Cloud Alibaba 中一个重要的组成部分,它提供了两个重要的功能:服务注册与发现和统一的配置中心功能. 服务注册与发现功能解决了微服务集群中,调用者和服务提供者连 ...

  6. Spring Cloud Alibaba | Nacos服务注册与发现

    目录 Spring Cloud Alibaba | Nacos服务注册与发现 1. 服务提供者 1.1 pom.xml项目依赖 1.2 配置文件application.yml 1.3 启动类Produ ...

  7. Spring Cloud Alibaba(一) 如何使用nacos服务注册和发现

    Nacos介绍 Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos 帮助您更敏捷和容易地构 ...

  8. Alibaba Nacos 学习(三):Spring Cloud Nacos Discovery - FeignClient,Nacos 服务注册与发现

    Alibaba Nacos 学习(一):Nacos介绍与安装 Alibaba Nacos 学习(二):Spring Cloud Nacos Config Alibaba Nacos 学习(三):Spr ...

  9. 实战二:nacos服务注册与发现,openfeign服务调用

    一,参照上一篇创建好微服务结构后,按业务需求编写各微服务逻辑 二,服务注册 1,安装nacos:下载,解压,运行startup.cmd 2,访问 http://localhost:8848/nacos ...

随机推荐

  1. 论文结果图:matplotlib和seaborn实现

    在论文中,可视化结果往往很重要,毕竟文字太抽象,需要图片向审稿人直观的展现出我们的结果.我也写了俩篇论文和一篇专利的申请,其中也有一些画图的程序,因此记录,防止以后忘了.由于篇幅原因,文章就不贴代码, ...

  2. ASP.NET Core3.x 基础(1)

    ASP.NET Core与2.x相比发生的一些变化: 项目结构 Blazor SignalR gRPC 关于Program类:Main方法,在系统执行时就会找到这个Main方法,实际上是配置了ASP. ...

  3. 【LifecycleException】: org.apache.catalina.LifecycleException: A child container failed during start 解决

    看了好多种解决方案: 第一种:从tomcat remove project -> clean project -> reboot project; 第二种:说用到的 jasper jsp解 ...

  4. linux驱动之定时器的介绍和内核时间的学习

    本文章摘自下面的网友: http://blog.sina.com.cn/s/blog_6e5b342e0100m87d.html 一.内核中如何记录时间 任何程序都需要时间控制,其主要目的是: 测量时 ...

  5. TypeScript 安装及基础运行环境搭建

    安装 TypeScript npm install -g typescript 安装成功后,命令行输入 tsc -v 命令提示当前安装的 TypeScript 版本: 出现版本号即安装成功. 使用 V ...

  6. python2-dpkt 下载

    原文链接:https://centos.pkgs.org/7/forensics-x86_64/python2-dpkt-1.9.2-2.el7.noarch.rpm.html .Download c ...

  7. Codeforces Round #665 (Div. 2)A-C题解

    A. Distance and Axis 题目:http://codeforces.com/contest/1401/problem/A 题解:对于n来说分两种情况,一是奇数,二则是偶数 ①奇数:对于 ...

  8. 基于函数的I/O操作(头文件stdio.h)

    基于函数库的I/O是C语言标准库的功能,基于系统级I/O函数实现. 系统级I/O函数对文件的标识是文件描述符,C语言标准库中对文件的标识是指向FILE结构的指针.在头文件cstdio或stdio.h中 ...

  9. MacOS开发环境搭建

    1 Java 安装jdk 下载安装即可,没什么可说的,着重说一下配置mac下的环境变量 $ /usr/libexec/java_home -V #查看安装的jdk版本和路径 $ vim ~/.bash ...

  10. Java线上问题排查神器Arthas快速上手与原理浅谈

    前言 当你兴冲冲地开始运行自己的Java项目时,你是否遇到过如下问题: 程序在稳定运行了,可是实现的功能点了没反应. 为了修复Bug而上线的新版本,上线后发现Bug依然在,却想不通哪里有问题? 想到可 ...