php nacos客户端,Nacos - 客户端注册

Nacos - 启动中提到了注册的入口,这里就讲一下注册的细节。

Tomcat启动成功后,会调用AbstractAutoServiceRegistration的onApplicationEvent方法,他会继续调用AbstractAutoServiceRegistration#bind。

AbstractAutoServiceRegistration#bindpublic 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();

}

AbstractAutoServiceRegistration#startpublic void start() {

if (!isEnabled()) {

if (logger.isDebugEnabled()) {

logger.debug("Discovery Lifecycle disabled. Not starting");

}

return;

}

// only initialize if nonSecurePort is greater than 0 and it isn't already running

// because of containerPortInitializer below

// 没启动过才注册

if (!this.running.get()) {

// 发布InstancePreRegisteredEvent事件

this.context.publishEvent(

new InstancePreRegisteredEvent(this, getRegistration()));

// 注册

register();

if (shouldRegisterManagement()) {

// 注册registerManagement

registerManagement();

}

// 发布InstanceRegisteredEvent事件

this.context.publishEvent(

new InstanceRegisteredEvent<>(this, getConfiguration()));

// 设置状态为启动

this.running.compareAndSet(false, true);

}

}

NacosAutoServiceRegistration#registerprotected void register() {

if (!this.registration.getNacosDiscoveryProperties().isRegisterEnabled()) {

log.debug("Registration disabled.");

return;

}

// 小于0重新设置端口

if (this.registration.getPort() < 0) {

this.registration.setPort(getPort().get());

}

super.register();

}

AbstractAutoServiceRegistration#register

registration的注入在启动的时候已经说过了。protected void register() {

this.serviceRegistry.register(getRegistration());

}

NacosServiceRegistry#register

封装好Instance后,调用NacosNamingService的registerInstance方法注册。Nacos - NacosNamingService初始化以及几个其他定时任务已经讲过了。public void register(Registration registration) {

if (StringUtils.isEmpty(registration.getServiceId())) {

log.warn("No service to register for nacos client...");

return;

}

// 获取NacosNamingService

NamingService namingService = namingService();

// 获取serviceId

String serviceId = registration.getServiceId();

String group = nacosDiscoveryProperties.getGroup();

// 获取Instance,一些信息从registration读取,一些从nacosDiscoveryProperties读取

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

封装心跳信息、开启定时任务续约以及调用serverProxy注册,这个url是/nacos/v1/ns/instance。public void registerInstance(String serviceName, String groupName, Instance instance) throws NacosException {

String groupedServiceName = NamingUtils.getGroupedName(serviceName, groupName);

if (instance.isEphemeral()) {

// 封装心跳信息

BeatInfo beatInfo = beatReactor.buildBeatInfo(groupedServiceName, instance);

// 开启定时任务续约

beatReactor.addBeatInfo(groupedServiceName, beatInfo);

}

serverProxy.registerService(groupedServiceName, groupName, instance);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值