ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-06-04 17:33:53  阅读:301  来源: 互联网

标签:register spring registration Nacos nacos serviceId 源码 SpringCloud 描述


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验证

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

标签:register,spring,registration,Nacos,nacos,serviceId,源码,SpringCloud,描述
来源: https://blog.csdn.net/qq_34125999/article/details/117566523

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有