nacos源码 nacos注册中心1.4.x 源码 如何注册服务 发送请求,nacos clinet客户端心跳 nacos 注册中心客户端如何发送的心跳 (三)
发布日期:2025-04-19 00:31:47 浏览次数:22 分类:精选文章

本文共 3415 字,大约阅读时间需要 11 分钟。

Spring Cloud Alibaba Discovery模块源码解析

在上一篇文章中,我们初步了解了NacosAutoServiceRegistration类的基本功能。接下来,我们将深入分析其源码,揭示其工作原理。

1. NacosAutoServiceRegistration类的register方法

NacosAutoServiceRegistration类中的register方法主要负责注册服务。代码如下:

protected void register() {    if (!this.registration.getNacosDiscoveryProperties().isRegisterEnabled()) {        log.debug("Registration disabled.");    } else {        if (this.registration.getPort() < 0) {            this.registration.setPort(this.getPort().get());        }        super.register();    }}

这个方法首先检查是否启用注册功能。如果启用且端口号有效,则调用父类的register方法。

2. 调用父类的register方法

父类的register方法位于AbstractAutoServiceRegistration类中,代码如下:

protected void register() {    this.serviceRegistry.register(this.getRegistration());}

可以看到,这个方法实际上是调用了serviceRegistry的register方法,并传递了当前的注册信息。

3. 进入ServiceRegistry接口

接下来,我们需要查看ServiceRegistry接口的定义。其代码如下:

package org.springframework.cloud.client.serviceregistry;public interface ServiceRegistry
{ void register(R var1); void deregister(R var1); void close(); void setStatus(R var1, String var2);
T getStatus(R var1);}

这个接口定义了四个主要方法:register、deregister、close和setStatus。这些方法的作用是管理服务注册和相关操作。

4. NacosServiceRegistry的实现

接下来,我们关注NacosServiceRegistry类,它是Nacos实现ServiceRegistry接口的类。代码如下:

package com.alibaba.cloud.nacos.registry;import com.alibaba.cloud.nacos.common.utils.StringUtils;import com.alibaba.cloud.nacos.registry.registration.Registration;import com.alibaba.cloud.nacos.registry.registration.Instance;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;public class NacosServiceRegistry implements ServiceRegistry
{ private static final Logger log = LoggerFactory.getLogger(NacosServiceRegistry.class); private final NacosDiscoveryProperties nacosDiscoveryProperties; private final NamingService namingService; @Autowired public NacosServiceRegistry(NacosDiscoveryProperties nacosDiscoveryProperties) { this.nacosDiscoveryProperties = nacosDiscoveryProperties; this.namingService = nacosDiscoveryProperties.namingServiceInstance(); } @Override public void register(Registration registration) { if (StringUtils.isEmpty(registration.getServiceId())) { log.warn("No service to register for nacos client..."); } else { String serviceId = registration.getServiceId(); Instance instance = this.getNacosInstanceFromRegistration(registration); try { this.namingService.registerInstance(serviceId, instance); log.info("nacos registry, {} {}:{} registered.", serviceId, instance.getHost(), instance.getPort()); } catch (Exception e) { log.error("failed to register nacos service: {}", serviceId, e); } } }}

5. ServiceRegistry的实现细节

在NacosServiceRegistry中,register方法接收了一个Registration对象。首先,检查serviceId是否为空。如果为空,则记录警告信息。如果serviceId有效,则从注册信息中获取实例,并调用NamingService的registerInstance方法进行注册。

6. 依赖注入和初始化

NacosServiceRegistry类中使用了依赖注入来获取NacosDiscoveryProperties和NamingService。这些依赖通常由Spring容器负责注入,以确保服务的自动化配置和管理。

7. 实例注册过程

在注册过程中,NacosServiceRegistry通过namingService.registerInstance方法将服务实例注册到Nacos服务中心。同时,日志记录了注册的详细信息,便于后续的监控和排查。

8. 总结

通过以上分析,我们可以清晰地看到NacosAutoServiceRegistration类在服务注册过程中的关键作用。它通过调用父类的register方法, ultimately调用了ServiceRegistry接口的实现类NacosServiceRegistry的register方法,从而将服务注册信息发送到Nacos服务中心。

上一篇:Nacos源码分析:心跳机制、健康检查、服务发现、AP集群
下一篇:nacos源码 nacos注册中心1.4.x 源码 spring cloud alibaba 的discovery做了什么 nacos客户端是如何启动的(二)

发表评论

最新留言

很好
[***.229.124.182]2026年06月15日 21时07分20秒