zoukankan      html  css  js  c++  java
  • springcloudalibaba与nacos服务注册流程图

    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-commonsMETA-INFspring.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请求,把客户端的信息发送给服务器,完成注册。
     
     
     

     

  • 相关阅读:
    jQuery Ajax 全解析
    据说:2010年最佳Flash网站
    SWFKit 3.5 + 注册机
    几何算法
    不错的3d切换
    常见程式算法推演
    未知
    3d地形与道路
    在3D世界中创建不同的相机模式——创建一个第一人称射击游戏(FPS)的相机:Quake风格的相机
    在3D世界中创建不同的相机模式——天空盒
  • 原文地址:https://www.cnblogs.com/Soy-technology/p/12717905.html
Copyright © 2011-2022 走看看