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. 当你的系统依赖于某个bug...

    标题粗略看是有点违反常识的,bug通常是指某些代码存在问题导致系统没有按照期望方式工作,应该是需要尽可能被修复的,这样系统才会正常工作.但是,开发实践中会发现在某些情况下,本来功能没有问题,在你信心满 ...

  2. Qt信号与槽使用方法最完整总结

    在图形界面编程中(参考<C++最好的图形库是什么?>),组件之间如何实现通信是核心的技术内容.Qt 使用了信号与槽的机制,非常的高效.简单.易学,方便开发者的使用.本文详细的介绍了Qt 当 ...

  3. Salesforce学习笔记之代码若干

    有几段试验性的代码因为公司要更新沙盒,删除了.在本地虽然还保存了副本,但怕以后刷新时误删,所以贴一份在这里,以便需要时拷贝. 1.用aura组件包装一个flow foo.cmp: <aura:c ...

  4. vue+vant 上传图片需要注意的事项

    <van-uploader v-model="fileList" multiple :after-read="afterRead" :max-count= ...

  5. topic相关问题

    1.下面是一个topic数据出现堵塞的情况示图. 如图所示,delta列表示当前分区未处理的数据条数,kafka current表示推送到topic的数据量,spout current表示已经处理的数 ...

  6. manjaro与python开发环境配置

    1.manjaro配置 1.1.启动项 sudo update-grub 注:Manjaro(archLinux)系统时间快8小时--> sudo timedatectl set-local-r ...

  7. try easy pytest 1tep介绍

    『 tep is a testing tool to help you write pytest more easily. Try Easy Pytest! 』 tep前身 tep的前身是接口自动化测 ...

  8. 9.oracle表查询关键字

    1.使用逻辑操作符号问题:查询工资高于500或者是岗位为manager的雇员,同时还要满足他们的姓名首字母为大写的J? select * from emp where (sal > 500 or ...

  9. Solving the Distal Reward Problem through Linkage of STDP and Dopamine Signaling

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract 在巴甫洛夫式和工具性条件下,奖励通常是在奖励触发动作几秒钟后产生的,从而产生了一个被称为“远端奖励问题”的解释难题:如果 ...

  10. java面向对象(封装,继承,多态,抽象,接口的定义和实现)

    1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...