Nacos 服务注册概述及客户端注册实例源码分析(一)(下)

简介: Nacos 服务注册概述及客户端注册实例源码分析(一)(下)

通过 Open API 注册实例

Nacos 官网提供了基于 RestFul API 方式的接口给我们去进行客户端实例的注册

官网地址:Nacos 注册实例-Open API

通过 postman 方式进行调用,来测试是否通过该请求可以实现客户端注册效果:

curl --location --request POST 'http://127.0.0.1:8848/nacos/v1/ns/instance' \
--form 'port="8848"' \
--form 'ip="127.0.0.1"' \
--form 'serviceName="nacos.test"'

或在项目中将 ephemeral 属性设置为 false,也可以实现通过 http 方法进行调用.

ephemeral=true 代表基于 gRPC,ephemeral=false 代表基于 Http

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        ephemeral: false

然后可以运行有引入该依赖的项目,通过 Debug 方式运行,增加如下断点,验证流程是否按正常的来走:

  • NacosServiceRegistry#register
  • NacosNamingService#registerInstance

随后会调用 NamingClientProxy 的实现类 NamingHttpClientProxy#registerService 方法,源码如下:

public void registerService(String serviceName, String groupName, Instance instance) throws NacosException {
    LogUtils.NAMING_LOGGER.info("[REGISTER-SERVICE] {} registering service {} with instance: {}", new Object[]{this.namespaceId, serviceName, instance});
    String groupedServiceName = NamingUtils.getGroupedName(serviceName, groupName);
    if (instance.isEphemeral()) {
        BeatInfo beatInfo = this.beatReactor.buildBeatInfo(groupedServiceName, instance);
        this.beatReactor.addBeatInfo(groupedServiceName, beatInfo);
    }
    Map<String, String> params = new HashMap(32);
    params.put("namespaceId", this.namespaceId);
    params.put("serviceName", groupedServiceName);
    params.put("groupName", groupName);
    params.put("clusterName", instance.getClusterName());
    params.put("ip", instance.getIp());
    params.put("port", String.valueOf(instance.getPort()));
    params.put("weight", String.valueOf(instance.getWeight()));
    params.put("enable", String.valueOf(instance.isEnabled()));
    params.put("healthy", String.valueOf(instance.isHealthy()));
    params.put("ephemeral", String.valueOf(instance.isEphemeral()));
    params.put("metadata", JacksonUtils.toJson(instance.getMetadata()));
    this.reqApi(UtilAndComs.nacosUrlInstance, params, "POST");
    // UtilAndComs.nacosUrlInstance == /nacos/v1/ns/instance
}

在这里会把实例信息先放到散列表中,然后调用 reqApi 方法来发送请求,接口:/nacos/v1/ns/instance

区分版本

spring-cloud-alibaba-version:2.2.8 版本使用的是 Nacos 2.1.1,默认采用 gRPC 调用;2.2.5.RELEASE 版本使用的是 Nacos 1.4.1,采用的是 Http 调用

总结客户端注册实例流程图

结尾

欢迎大家在评论框分享您的看法,喜欢该文章帮忙给个赞👍和收藏,感谢!!

分享个人学习源码的几部曲

  • 设计模式掌握为前提,程序员的内功修炼法,🙅不分语言
  • 不要太追究于细节,捋清大致脉路即可;太过于追究于细节,你会越捋越乱
  • 关注重要的类和方法、核心逻辑
  • 掌握 Debug 技巧,在关键的类和方法多停留,多作分析和记录

更多技术文章可以查看:vnjohn 个人博客


目录
相关文章
|
6天前
|
SpringCloudAlibaba 负载均衡 Java
【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心
【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心
21 3
|
6天前
|
安全 Linux Nacos
如何使用公网地址远程访问内网Nacos UI界面查看注册服务
如何使用公网地址远程访问内网Nacos UI界面查看注册服务
25 0
|
6天前
|
负载均衡 Cloud Native Java
Nacos 注册中心(2023旧笔记)
Nacos 注册中心(2023旧笔记)
20 0
|
6天前
|
Dubbo Java 应用服务中间件
深度剖析:Dubbo使用Nacos注册中心的坑
2020年笔者在做微服务部件升级时,Dubbo的注册中心从Zookeeper切换到Nacos碰到个问题,最近刷Github又有网友提到类似的问题,就在这篇文章里做个梳理和总结。
深度剖析:Dubbo使用Nacos注册中心的坑
|
6天前
|
SpringCloudAlibaba Java Nacos
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
|
6天前
|
Dubbo 关系型数据库 MySQL
nacos常见问题之命名空间配置数据上线修改如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
104 1
|
6天前
|
存储 运维 监控
NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
【2月更文挑战第33天】NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
92 2
|
6天前
|
SpringCloudAlibaba 应用服务中间件 Nacos
【微服务 SpringCloudAlibaba】实用篇 · Nacos配置中心(下)
【微服务 SpringCloudAlibaba】实用篇 · Nacos配置中心
18 0
|
6天前
|
JSON SpringCloudAlibaba Java
【微服务 SpringCloudAlibaba】实用篇 · Nacos配置中心(上)
【微服务 SpringCloudAlibaba】实用篇 · Nacos配置中心
22 1
|
6天前
|
Nacos
nacos 配置页面的模糊查询
nacos 配置页面的模糊查询

热门文章

最新文章