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. 极简 Node.js 入门 - 2.1 Path

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  2. C# ASP 动态添加Html Table行

    用JS放法实现以下效果: 前端文件Questionnaire23.aspx: <%@ Page Title="题目" Language="C#" Mast ...

  3. Java环境变量配置,HelloWorld。

    一  配置环境变量: 1.右键计算机属性 2.点击高级系统设置 3.点击环境变量 在新建页面,输入变量名“JAVA_HOME”:变量值“你的jdk的路径 在系统变量区域,选择“新建”,输入变量名“CL ...

  4. tableauRFM分析

    1.数据源 2.创建相关字段 2.1 购买点会员生命期 2.2 会员最后购买时间 2.3 最后购买点生命期 3.近一个月老客户的生命期情况 排除了当天创建当天购买的情况,可以看到超市的大部分用户是两年 ...

  5. C#设计模式之4-原型模式

    原型模式(Prototype Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/395 访问. 原型模式属 ...

  6. sourcetree关于注册的问题

    当前只有Win的版本,Mac自行百度(笑) 很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作. 然鹅~~sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者操作 ...

  7. win10下使用AIDA64建立副屏监控

    写在前面: 最近刚攒了一台台式机,但是苦于没有太喜欢的温度监控插件,在贴吧里面看到有人用AIDA64做了一个副屏监控,感觉非常6,于是就开始了折腾之路. 需要的设备和软件: windows系统电脑一台 ...

  8. 深度学习 | sklearn的train_test_split()各函数参数含义解释(超级全)

    在机器学习中,我们通常将原始数据按照比例分割为"测试集"和"训练集",从 sklearn.model_selection 中调用train_test_split ...

  9. 浏览器自动化的一些体会6 增强的webBrowser控件

    这里谈两点 1.支持代理服务器切换 一种方法是修改注册表,不是太好的做法,而且,只能改全局设置,不能改局部(比如只让当前的webBrowser控件使用代理,而其他应用不用代理) 另外一个较好的方法,示 ...

  10. fatal: 远程 origin 已经存在 | 关于git push 详解

    fatal: 远程 origin 已经存在. 解决方法1:删除origin主机名 git remote rm origin #删除 git remote add origin https://gith ...