皮皮网

皮皮网

【微小区 9.9.3源码】【bootstrabox源码】【Xfoil 源码】nacos源码注册服务流程

时间:2024-11-20 23:21:15 分类:探索

1.nacos是码注怎么进行服务注册的
2.Nacos 1.4.1源码解析之服务注册--AP
3.Nacos服务端源码分析(四): 拉取服务信息
4.Nacos 注册服务源码分析
5.Nacos 源码环境搭建
6.Nacos 服务注册源码分析

nacos源码注册服务流程

nacos是怎么进行服务注册的

       今天,我们从源码的册服程角度出发,看看nacos是码注如果进行服务注册,服务调用,册服程负载均衡,码注心跳检测等功能。册服程微小区 9.9.3源码首先大家我们去github上拉取代码,码注/alibaba/nacos,册服程打开后我们先从注册实例作为入口开始看,码注注册实例的册服程接口在API模块:

服务注册

       点进去发现里面有不同的方法,我们以第一个为例,码注

       他是册服程先初始化一个Instance对象,赋值后调用registerInstance()方法,码注通过clientProxy.registerService()去注册实例,册服程继续往下追踪

       这个NamingClientProxy()接口有多个实现类(根据实现类的码注名称我们看到他这里用了策略模式来处理HTTP还是RPC请求)我们先看HTTP实现类是如果处理的:

心跳检测发送

       关注下我圈起来的地方,这里就是心跳机制的开始喽,他先创建一个BeanInfo对象,然后交给beatReactor.addBeanInfo()这个方法。bootstrabox源码这个beatReactor看起来像个容器,那我们就去看一下他是怎么处理的。

       这个类有个定时任务线程池,看到这里,我们大概就猜得出他的心跳检测机制应该是通过定时任务线程池去处理的。然后我们再看他的addBeatInfo()方法做了什么?

       果然不出所料,先创建BeatTask对象然后交给定时任务线程池去定时处理这个实例信息,但是他的定时任务应该只执行一次呀,他是怎么一直不断的检测的呢,我们进BeatTask这个内部类看看他是怎么循环处理的:

       通过这段代码我们可以清楚的看到他是通过在BeanTask的run()方法重复执行定时任务达到一直循环检测的需求。然后我们返回继续注册实例

       封装请求参数,调用API

       最后发送注册实例的HTTP请求,一个注册实例的完整链路就走完啦。

负载均衡

       我们看获取实例的时候nacos是怎么处理的

       先尝试从serviceInfoHolder获取服务信息如果没获取到,则通过clientProxy调用API去获取所有实例列表

       但是我只要一个,他应该返回我哪一个呢?注意这个Balancer.RandomByWeight.selectHost(serviceInfo);就是负载均衡的关键,

       最后从ref里面通过随机数获取一个实例返回。Xfoil 源码当然他的负载均衡有好几种策略。有轮询,weight权重,ip_hash,fair,等。大家有兴趣的可以自己去翻一翻都是怎么实现的。

       最后如果有理解的不对的地方,欢迎大家指正纠正,一起进步。希望今天的文章对小伙伴们有帮助。

Nacos 1.4.1源码解析之服务注册--AP

       nacos的使用方法在zhuanlan.zhihu.com/p/...有详细介绍。

       在启动nacos Client时,首先开启自动装配功能,接着初始化discovery配置参数。紧接着,注册NacosServiceRegistry,MSAPI源码然后注册服务自动注册bean NacosAutoServiceRegistration。在Spring容器启动完成时,启动发布监听事件。此过程中,NacosAutoServiceRegistration实现ApplicationListener,监听springBoot web容器启动事件,于Spring容器启动的finishRefresh阶段启动web容器后发布。接收到消息后执行onApplicationEvent,设置服务端口。

       服务元数据初始化通过NacosRegistration,用户可以通过配置文件配置,或使用API进行服务注册。服务注册通过rest请求至/nacos/v1/ns/instance实现,官方文档提供详细指导。

       nacos server端的API服务主要由com.alibaba.nacos.naming.controllers.InstanceController入口控制。它采用缓存结构,第一层为namespace,openfeign 源码第二层为group分组。在service中,clusterMap按照集群分组,集群内才是实例列表。在添加、修改实例或基于集群纬度修改实例时,使用copyOnWrite方式替换。流程图展示基本操作流程。

Nacos服务端源码分析(四): 拉取服务信息

       本文深入解析Nacos服务端源码,特别关注服务信息的主动拉取机制。主动拉取服务信息的URL为:/alibaba/nacos/releases/tag/2.1.1。

       解压源码后,使用IDEA打开项目。若在com.alibaba.nacos.consistency.entity类处遇到报红错误,通过编译整个项目解决此问题。

       解决报红后,使用终端在nacos-2.1.1目录下执行编译操作。

       定位至console项目中的Nacos启动类,并配置VM options参数,设置为单机模式启动。

       成功启动后,控制台应显示项目启动成功的信息。

       执行命令请求.alibaba.nacos.Nacos,以及如何通过IDEA进行启动和调试。要深入了解Nacos的源码,可以参考nacos.io和github.com/alibaba/nacos...的文档。

最新版Nacos安装教程(史上最详细保姆级教程)

       Nacos,全称Dynamic Naming and Configuration Service,是一个专为构建云原生应用而设计的动态服务发现、配置管理和服务管理平台。它旨在简化微服务的构建、交付与管理,支持服务发现、配置管理、服务元数据及流量控制等功能,是现代应用架构(如微服务和云原生)的重要基础设施。

       Nacos的核心特性包括访问其官网获取更多信息:Nacos官网 和参与活跃的社区:Nacos官方社区,并从GitHub下载预编译的Nacos服务器或源代码:GitHub主页为github.com/alibaba/nacos,Release页面为github.com/alibaba/nacos/releases。

       下载后,解压文件并进行必要的配置。在2.2.0.1和2.2.1版本中,需修改conf目录下的application.properties文件,设置nacos.core.auth.plugin.nacos.token.secret.key,使用默认值SecretKey和VGhpc0lzTXlDdXN0bTZWNyZXRLZXkwMTIzNDU2Nzg=(用于测试,详情参阅鉴权插件)。

       Nacos默认使用端口,如果该端口被占用,需关闭占用进程或在conf目录中调整server.port。Nacos的本地数据库默认为Derby内存数据库,可修改为MySQL等其他数据库,并执行mysql-schema.sql脚本来创建表。在启动Nacos前,需进入bin目录并使用cmd执行命令,最后通过浏览器访问.0.0.1:/nacos,使用默认的nacos账号和密码登录。

       若要在SpringBoot项目中集成Nacos,需添加配置中心依赖,并在application.yml中调整,注意新版Nacos的鉴权需求,注册和配置中心的username和password通常与控制台登录密码(默认nacos/nacos)保持一致。

Nacos系列创建ConfigService实例源码分析

       在学习Nacos的过程中,我们关注的重点是创建ConfigService实例的实现。Nacos通过NacosFactory的createConfigService方法创建ConfigService实例,这个工厂类是获取各种服务对象的统一入口。

       ConfigService是配置服务接口,负责配置的获取、发布、管理等操作,其核心实现类NacosConfigService。同样,Nacos的命名服务和维护服务也是通过NacosFactory创建实例的,如NamingService用于服务实例的注册与管理,NamingMaintainService则直接与Nacos服务器交互。

       创建ConfigService的具体流程中,首先通过ConfigFactory的createConfigService方法,构造器会进行一些参数校验,并初始化命名空间。例如,校验contextPath属性的合法性,确保其不包含连续的/。然后,会根据用户租户信息、环境变量或配置属性获取namespace值。

       ConfigFilterChainManager和ServerListManager的构造也非常重要,前者管理配置过滤器,后者负责维护服务器列表,能够通过配置属性或动态请求获取最新的服务器信息。当创建ConfigService实例时,还会启动长轮询定时任务,如ClientWorker的executeConfigListen方法,通过ServerHttpAgent进行HTTP请求以获取和管理配置数据。

       总结来说,创建ConfigService实例涉及工厂方法的调用、参数处理、服务实例初始化以及与Nacos服务器的交互。通过本文的深入分析,你将更好地理解Nacos配置服务的初始化过程。