Nacos服务注册源码:客户端

入口

我们就拿nacos自己example下的NamingExample来做测试

public class NamingExample {public static void main(String[] args) throws NacosException, InterruptedException {Properties properties = new Properties();properties.setProperty("serverAddr", "localhost");properties.setProperty("namespace", "public");NamingService naming = NamingFactory.createNamingService(properties);naming.registerInstance("nacos.test.3", "11.11.11.11", 8888, "TEST1");System.out.println("instances after register: " + naming.getAllInstances("nacos.test.3"));Executor executor = new ThreadPoolExecutor( 1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(),new ThreadFactory() {@Overridepublic Thread newThread(Runnable r) {Thread thread = new Thread(r);thread.setName("test-thread");return thread;}});naming.subscribe("nacos.test.3", new AbstractEventListener() {//EventListener onEvent is sync to handle, If process too low in onEvent, maybe block other onEvent callback.//So you can override getExecutor() to async handle event.@Overridepublic Executor getExecutor() {return executor;}@Overridepublic void onEvent(Event event) {System.out.println("serviceName: " + ((NamingEvent) event).getServiceName());System.out.println("instances from event: " + ((NamingEvent) event).getInstances());}});naming.deregisterInstance("nacos.test.3", "11.11.11.11", 8888, "TEST1");Thread.sleep(1000);System.out.println("instances after deregister: " + naming.getAllInstances("nacos.test.3"));Thread.sleep(1000);}
}

NamingFactory.createNamingService

image.png
将配置参数properties传进去,然后通过反射创建NamingService, 也就是说会调用到NacosNamingService的构造方法,我们来看一下
image.png
这里会调用到NamingClientProxyDelegate的构造方法
image.png

这里我们提前注意一下NamingGrpcClientProxy的构造方法,后面会用到
image.png
!!!有一个start方法,它会创建连接
image.png
connectToServer会调用到子类GrpcClient.connectToServer方法
image.png

naming.registerInstance

这里的namingServer是NacosNamingServer,最终会调用到NacosNamingServer.registerInstance(serviceName, ip, port, clusterName)
image.png
image.png
如果说group不传入的话,默认会设置一个DEFAULT_GROUP,继续调用
image.png
image.png
在构造方法里面我们能看到clientProxy实际上是一个NamingClientProxyDelegate,这里会调用它的registerService

NamingClientProxyDelegate.registerService

image.png
image.png
一般来说我们实例都是临时实例,所以这里使用的grpcClientProxy
接下来会调用到NamingGrpcClientProxy.registerService(serviceName, groupName, instance)

NamingGrpcClientProxy.registerService

image.png
image.png

  1. 又封装了一个InstanceRequest对象,里面包含namespaceId, serverName, groupName, instance等
  2. 调用requestToServer:向服务端发起请求了

image.png
这里的rpcClint是GrpcSdkClient,所以会调用到它的request方法
image.png

GrpcSdkClient.request

这里会调用到父类RpcClient.request方法
image.png
image.png
这里最终会调用到GrpcConnection里面的request方法
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/657067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

39、FlatFormer:MIT+交大+清华共同提出,更加高效的Transformer[无绳蹦极第一人!]

本文由麻省理工学院、上海交通大学、清华大学于2023年7月14日发表于Arxiv的<Computer Science> 论文&#xff1a; [2301.08739] FlatFormer: Flattened Window Attention for Efficient Point Cloud Transformer (arxiv.org) 代码&#xff1a; github.com Abstract&a…

c语言 ceil() 函数

ceil()是C语言中的一个数学函数&#xff0c;用于向上取整。它的函数原型定义在math.h头文件中。 ceil()函数的作用是返回一个大于或等于给定参数的最小整数值&#xff0c;即将参数向上取整到最接近的整数。返回值的数据类型为double。 以下是ceil()函数的函数原型&#xff1a…

接续奋斗四十载 勇毅前行向未来 2024食品产业高质量发展论坛暨《中国食品报》创刊40周年研讨会在京举行

四十年春华秋实&#xff0c;四十年砥砺奋进。《中国食品报》从改革开放之初的春天里走来&#xff0c;以笔为媒&#xff0c;勇担道义&#xff0c;从拯救中华传统老字号品牌开始&#xff0c;为我国食品产业发展奔走疾呼&#xff0c;为提升我国食品企业融入国际化潮流、提升国际竞…

联合 Maxlinear 迈凌 与 Elitestek 易灵思 - WPI 世平推出基于 FPGA 芯片的好用高效电源解决方案

近期 WPI 世平公司联合 Maxlinear 迈凌电源产品搭配 Elitestek 易灵思 FPGA 共同合作推出基于 FPGA 芯片的好用高效电源解决方案。 Elitestek 易灵思 FPGA 核心产品有 2 大系列 : Trion 系列与钛金系列。Trion 系列主要特点是 : 1. 40nm 工艺 2. 超低功耗 ( 可低至竞争对手的 …

[ESXi 8]安装centos7

文章目录 创建虚拟机创建虚拟机选择centos7选择存储选择镜像文件上传ios镜像文件 安装即将完成 启动虚拟机自动获取ip设置root密码安装成功 创建虚拟机 创建虚拟机 选择centos7 选择存储 选择镜像文件 上传ios镜像文件 如图显示上传进度&#xff0c;上传完毕之后&#xff0c;将…

网络协议与攻击模拟_11DHCP欺骗防护

开启DHCP 监听 ip dhcp snooping 指定监听vlan ip dhcp snooping vlan 1 由于开启监听后&#xff0c;交换机上的接口就全部变成非信任端口&#xff0c; 非信任端口会拒绝DHCP报文&#xff0c;会造成正常的DHCP请求和响应都无法完成。 现在是请求不到IP地址的&#xff0c;…

今日方知-依赖注入

在学习MQ时我遇到了一个问题 Configuration public class RabbitMQConfig { //声明推送的队列名 // private String simplename "spring.lz.silple"; // private String workname "spring.lz.work";/*** 创建一个队列对象&#xff0c;** return*/ Bean …

JS图片二维码识别

前言 js识别QR图片&#xff0c;基于jsQR.js 代码 <!DOCTYPE html> <html> <head><meta charset"utf-8" /><title>图片二维码识别</title><script src"https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js">…

vector(顺序表)

vector容器就相当于一个顺序表&#xff0c;只不过他把一些功能分装到了容器里 常用接口及语法 构造&#xff1a;vectro<数据类型> 对象名 输出&#xff1a;和顺序表一样我们需要遍历打印&#xff0c;而不能直接用cout打印 对象.push_back () 尾插 对象.pop_back() 尾删…

NetCore iText7 根据PDF模板 导出PDF

iText 7 是一个用于处理 PDF 文件的流行的开源库&#xff0c;它提供了丰富的功能&#xff0c;包括创建、编辑和处理 PDF 文档。它支持 .NET 平台&#xff0c;因此可以在 .NET Core 中使用该库来处理 PDF 文件。 使用 iText 7&#xff0c;您可以进行以下操作&#xff1a; 1. 创…

【Java-JDK】JDK 的安装与环境变量的配置:Windows Linux

【Java-JDK】JDK的安装与环境变量的配置&#xff1a;Windows & Linux 1&#xff09;Windows安装JDK1.1.下载JDK1.1.安装JDK1.2.JDK环境配置1.3.验证环境变量是否配置成功 2&#xff09;Linux安装JDK2.1.下载JDK2.2.安装JDK2.3.JDK环境配置2.4.验证环境变量配置是否成功 1&a…

Java-并发高频面试题

1.说一下你对Java内存模型&#xff08;JMM&#xff09;的理解&#xff1f; 其实java内存模型是一种抽象的模型&#xff0c;具体来看可以分为工作内存和主内存。 JMM规定所有的变量都会存储再主内存当中&#xff0c;再操作的时候需要从主内存中复制一份到本地内存&#xff08;c…

头歌C++之for循环应用(II)

目录 第1关&#xff1a;百钱买百鸡问题 本关必读 本关任务 测试说明 第2关&#xff1a;找出乒乓球比赛中3对赛手的名单 本关必读 本关任务 测试说明 第3关&#xff1a;计算球第n次落地时经过的距离和反弹的高度 本关必读 本关任务 测试说明 第1关&#xff1a;百钱买…

Utreexo:优化Bitcoin UTXO集合的基于哈希的动态累加器

1. 引言 前序博客&#xff1a; Utreexo&#xff1a;比特币UTXO merkle tree proof以节约节点存储空间 MIT Digital Currency Initiative 的 Thaddeus Dryja 2019年论文 Utreexo: A dynamic hash-based accumulator optimized for the Bitcoin UTXO set。 开源代码实现见&…

【leetcode100-077到080】【贪心】四题合集

【买股票】 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取…

KubeSphere 核心实战之四【在kubesphere平台上部署Ruoyi-cloud项目】(实操篇 4/4)

**《KubeSphere 核心实战系列》** KubeSphere 核心实战之一&#xff08;实操篇 1/4&#xff09; KubeSphere 核心实战之二&#xff08;实操篇 2/4&#xff09; KubeSphere 核心实战之三&#xff08;实操篇 3/4&#xff09; KubeSphere 核心实战之四&#xff08;实操篇 4/4&…

前端颜料盘??

前端颜料盘&#xff1f;&#xff1f; 一、原生颜料盘 <input type"color" placeholder"选择颜色">二、第三方开源库 Pickr&#xff1a; GitHub: https://github.com/Simonwep/pickr官方网站: https://simonwep.github.io/pickr/Pickr 是一个轻量级…

20240130 大模型快讯

//社区生态// 讯飞星火大模型v3.5发布。讯飞发布了完全基于全国产算力平台“飞星一号”训练的星火大模型v3.5&#xff0c;同时开源深度适配国产算了的iFlyTekSpark-13B大模型。 Code Llama 70B大模型发布。Meta发布并开源了基于Llama 2的大模型Code Llama 70B&#xff0c;在Hu…

产品说明书怎么做?有模板吗?

产品说明书是一种重要的工具&#xff0c;它向消费者提供有关产品的详细信息和使用指南。一个好的产品说明书不仅可以帮助消费者正确地使用产品&#xff0c;还可以增加产品的销售量和用户满意度。那么&#xff0c;如何制作一份优秀的产品说明书呢&#xff1f;是否有现成的模板可…

ubantu操作hbase

到firefox中按照网站找以下文件进行下载 新建一个窗口启动节点 下载完成则回到下载目录 如果下载慢也可以将文件放在share中&#xff0c;然后拷贝到当前目录 进入到root 然后回到hadoop 解压到/usr/local 进入到local&#xff0c;将hbase改名 修改权限 配置环境变量 执行 回到h…