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验证
标签:register,spring,registration,Nacos,nacos,serviceId,源码,SpringCloud,描述 来源: https://blog.csdn.net/qq_34125999/article/details/117566523