SpringCloud Nacos 【客户端】自动注册源码解析

1 项目demo

在这里插入图片描述

1.1 pom

 <dependencies>
        <!--spring cloud alibaba-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>

1.2 ProviderController

@RestController
@RequestMapping("/provider")
public class ProviderController {

    @Value("${server.port}")
    private Integer port;


    @GetMapping("/hello")
    public String hello() {

        return "server port: " + port + ", say: Hello World";
    }

}

1.3 ProviderApplication

@SpringBootApplication
public class ProviderApplication {

    public static void main(String[] args) {

        SpringApplication.run(ProviderApplication.class);

    }

}

1.4 启动

在这里插入图片描述

2 静态源码解读

2.1 spring.factories

描述: springboot 自动装配原理,查看nacos包下面的 spring.factories文件。找到NacosServiceRegistryAutoConfiguration类,该类作用是nacos服务自动装配。
在这里插入图片描述

2.2 NacosServiceRegistryAutoConfiguration

在这里插入图片描述

2.3 NacosAutoServiceRegistration

描述: 查看当前类图。发现当前类实现了ApplicationListener接口,及有监听事件。
在这里插入图片描述
描述: 查看监听事件。监听事件在其父类AbstractAutoServiceRegistration里。
在这里插入图片描述

描述: 跟踪bind方法。
在这里插入图片描述
描述: 进入start方法。
在这里插入图片描述
描述: 进入NacosAutoServiceRegistration类 register 方法。
在这里插入图片描述
描述: 进入AbstractAutoServiceRegistration 类register方法。
在这里插入图片描述
描述: 既然怒NacosServiceRegistry类register方法。

@Override
	public void register(Registration registration) {

		if (StringUtils.isEmpty(registration.getServiceId())) {
			log.warn("No service to register for nacos client...");
			return;
		}
        //获取namingService,serviceId、组id
		NamingService namingService = namingService();
		String serviceId = registration.getServiceId();
		String group = nacosDiscoveryProperties.getGroup();
		//封装注册实例
		Instance instance = getNacosInstanceFromRegistration(registration);

		try {
		    //注册
			namingService.registerInstance(serviceId, group, instance);
			log.info("nacos registry, {} {} {}:{} register finished", group, serviceId,
					instance.getIp(), instance.getPort());
		}
		catch (Exception e) {
			log.error("nacos registry, {} register failed...{},", serviceId,
					registration.toString(), e);
			// rethrow a RuntimeException if the registration is failed.
			// issue : https://github.com/alibaba/spring-cloud-alibaba/issues/1132
			rethrowRuntimeException(e);
		}
	}

在这里插入图片描述
描述: NacosNamingService 调用registerInstance 进行当前服务的注册。
在这里插入图片描述

3 Debug验证

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

响彻天堂丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值