通过 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 个人博客