Nacos服务注册与发现中心之服务注册(客户端源码解读)

Nacos服务注册与发现中心之服务注册

  本文只介绍nacos的服务注册与发现中心功能中的服务提供者,在启动时与nacos服务器的交互,使用的是SpringCloud(Hoxton.SR12)集成Nacos1.0,其他集成方式不作介绍。

入口类及具体方法

服务注册的入口类为:AbstractAutoServiceRegistration.java
此类的类图为:
在这里插入图片描述

  • 此类实现了ApplicationListener接口,用于监听WebServerInitializedEvent事件,该事件是web容器在准备完毕后发送的事件,关于此事件的介绍为:
* Event to be published when the {@link WebServer} is ready. Useful for obtaining the
 * local port of a running server.

大概意思为:该事件是在web容器准备好(此处理解为初始化完毕,具体怎么算初始化完毕还没有找到相关定义,但是起码是已经完成了端口的监听)发布,用于获取运行中的服务端的本地端口

  • AbstractAutoServiceRegistration类监听WebServerInitializedEvent事件的代码为:
public void onApplicationEvent(WebServerInitializedEvent event) {
   
   
		bind(event);
}
  • AbstractAutoServiceRegistration.bind(WebServerInitializedEvent event) 方法为:
public void bind(WebServerInitializedEvent event) {
   
   
		ApplicationContext context = event.getApplicationContext();
		if (context instanceof ConfigurableWebServerApplicationContext) {
   
   
			if ("management".equals(((ConfigurableWebServerApplicationContext) context)
					.getServerNamespace())) {
   
   
				return;
			}
		}
		this.port.compareAndSet(0, event.getWebServer().getPort());
		this.start();
}

可以看出这个方法主要是设置了port变量的值为web容器监听的端口的值,而具体的逻辑在start()方法上。

  • AbstractAutoServiceRegistration.start() 方法:
public void start() {
   
   

		 ...  //去掉不关心的代码
		 
		if (!this.running.get()) {
   
   
			this.context.publishEvent(
					new InstancePreRegisteredEvent(this, getRegistration()));
			register();
			if (shouldRegisterManagement()) {
   
   
				registerManagement();
			}
			this.context.publishEvent(
					new InstanceRegisteredEvent<>(this, getConfiguration()));
			this.running.compareAndSet(false, true);
		}

	}

此处我们看到最终会调用register()方法进行服务的注册,而接下来就要说到Nacos提供的NacosAutoServiceRegistration类。

NacosAutoServiceRegistration

先来看看NacosAutoServiceRegistration的类图

在这里插入图片描述
可以看到,此类是继承了AbstractAutoServiceRegistration类。翻看代码发现他重写了AbstractAutoServiceRegistration的register()方法:

@Override
	protected void register() {
   
   
		if (!this.registration.getNacosDiscoveryProperties().isRegisterEnabled()) {
   
   
			log.debug("Registration disabled.");
			return;
		}
		if (this.registration.getPort() < 0) {
   
   
			this.registration.setPort(getPort
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值