当前位置: 首页 > news >正文

【Java面试】Nacos自动注册原理实现以及服务注册更新并如何保存到注册表

文章目录

  • Nacos自动注册原理实现
  • 服务注册更新并如何保存到注册表

Nacos自动注册原理实现

完整流程
我们知道SpringBoot提供了挂载点的方式来帮助我们的类完成自动注入。
Nacos再META-INF的spring.factories这个文件中添加了自己需要自动注入的Bean对象。
叫做NacosServiceRegistry,这个类实现了SpringCloud提供的register方法,来帮助我们向注册中心注册实例。
因此后面的操作流程就变为了,如何让服务启动的时候,就能自动的调用这个register方法。
Nacos的方法是依靠Spring的容器创建发生的事件来做到的。
我们知道创建IOC容器的时候会调用refresh方法来注册监听器,发布事件。
而Nacos的自动注册类就实现了ApplicationListener方法并且它监听的就是ServletWeb的初始化事件。
那么只要在容器完成初始化之后,就会完成将当前服务注册到注册中心这一过程。

服务注册更新并如何保存到注册表

完整流程
我们知道Nacos有三个隔离环境的东西,namespace,group,service。
其中service就是具体的服务,而这些服务支持以集群的方式部署,所以service中包含了cluster这个结构。
从上面的分析我们也知道,Nacos的注册表信息,应该是一个类似于三层Map的一个结构。
也就是namespace里面对应多个group,每个group可以有多个的service,service中可以有集群cluster,而这些cluster集群中的一个又一个的,就是我们的instance实例,也就是我们启动的一个又一个的微服务。
所以当我们注册一个服务的时候,我们需要先获取到Service,知道它是那个服务,然后将当前实例放入到这个服务对应的集合中去。
此时我们就可以使用上面的服务的namespace,group的方式来定位到这个service。
定位到service之后,如果service还没创建就创建,Nacos为了保证并发安全甚至使用了双检索的方式来创建service,然后创建完毕service之后就可以将服务放入,结构为服务名称:服务实例。
而此时,这将会创建一个定时任务,这个定时任务将会获取到当前service中的所有实例,并且判断15s内是否发送回了心跳,如果没有的话,会将实例的healthy状态设定为false,而如果超过30s,那么当前实例将会被剔除。
到此时service就已经创建好了,我们现在要做的就是吧当前的新实例添加进去。
Nacos的方式为全量添加,也就是先获取之前已经存在的,然后再补上当前的。
这里用到一个CopyOnWrite的方式来保证并发安全。
之后的流程就是判断当前实例是临时还是持久实例,然后放入到临时或者持久实例对应的set集合中去。
这里分为Distro和Raft两种协议,Distro使用的是异步的方式来更新数据,并且会发布一个事件来让集群中的其他节点知道数据更新了。

相关文章:

【Java面试】Nacos自动注册原理实现以及服务注册更新并如何保存到注册表

文章目录 Nacos自动注册原理实现服务注册更新并如何保存到注册表 Nacos自动注册原理实现 完整流程 我们知道SpringBoot提供了挂载点的方式来帮助我们的类完成自动注入。 Nacos再META-INF的spring.factories这个文件中添加了自己需要自动注入的Bean对象。 叫做NacosServiceRegi…...

linux 手动编译安装 pkg-config 步骤

1. 下载源码 Index of /releases (pkg-config.freedesktop.org) 2. 解压 并 进入解压后的文件夹 3. 运行配置文件 ./configure 错误解决办法:在linux中使用 ./configure 时报错 4. 编译、 自检、 安装 make make check make install 5. 安装完成后查看版本号…...

【MongoDB】数据库、集合、文档常用CRUD命令

目录 一、数据库操作 1、创建数据库操作 2、查看当前有哪些数据库 3、查看当前在使用哪个数据库 4、删除数据库 二、集合操作 1、查看有哪些集合 2、删除集合 3、创建集合 三、文档基本操作 1、插入数据 2、查询数据 3、删除数据 4、修改数据 四、文档分页查询 …...

【JVM】是如何管理内存的

文章目录 JVM 内存管理 模型JVM内存管理示例解析jvm 常见优化手段 JVM 内存管理 模型 以下是JVM内存管理的详细图示: ------------------------------------------------------ | Java 运行时数据区 | ------…...

进程与线程、线程创建、线程周期、多线程安全和线程池(ThreadPoolExecutor)

目录 进程与线程线程和进程的区别是什么?线程分两种:用户线程和守护线程线程创建四种方式run()和start()方法区别:为什么调用 start() 方法时会执行 run() 方法,为什么不能直接调用 run() 方法?Runnable接口和Callable…...

《论文阅读13》Efficient Urban-scale Point Clouds Segmentationwith BEV Projection

一、论文 研究领域: 城市级3D语义分割论文:Efficient Urban-scale Point Clouds Segmentationwith BEV Projection论文链接 注: BEV: Birds Eye View BEV投影是指鸟瞰视角(Birds Eye View,简称BEV)的一种从上方观看对象或场景的…...

Django实现音乐网站 ⑻

使用Python Django框架制作一个音乐网站, 本篇主要是后台对单曲原有功能的基础上进行部分功能实现和显示优化。 目录 新增编辑 歌手下拉显示修改 设置歌曲时长 安装eyed3库 获取mp3时长 歌曲时长字段修改 重写save方法 增加歌手单曲数量 查询歌手单曲数量 …...

VScode中同时打开两个脚本

使用快捷键: CtrlAltRightArrow 效果: 可以看到,上述两个脚本使用独立的窗口进行编辑和查看。...

能源电力工程师专属Python学习资料

随着我国新型电力系统的建设,一方面电源侧各类新能源装机快速增长,对于新能源出力的功率预测需求日益增长;另一方面,我国电力市场经过 8 年建设,关于电力商品价格影响因素的研究亟待深入。超过 90% 的业务小伙伴都具备…...

推荐5款实用软件,提高工作效率,丰富生活乐趣

​ 分享软件会让我感到开心和满足,因为我知道这些软件可以提高工作效率,丰富生活乐趣。今天再次将几款非常实用的软件推荐给大家。 截图翻译工具——CopyTranslator ​ CopyTranslator是一款非常实用的截图翻译软件,它支持对截图、选定区域进行OCR文字识别,自动翻…...

Python爬虫在电商数据挖掘中的应用

作为一名长期扎根在爬虫行业的专业的技术员,我今天要和大家分享一些有关Python爬虫在电商数据挖掘中的应用与案例分析。在如今数字化的时代,电商数据蕴含着丰富的信息,通过使用爬虫技术,我们可以轻松获取电商网站上的产品信息、用…...

element-ui 表格el-table的列内容溢出省略显示,鼠标移上显示全部和定制样式

1、在对应列加上省略显示show-overflow-tooltip属性&#xff0c;如果加上这属性&#xff0c;鼠标移上还是没效果&#xff0c;要考滤是不是层级的原因&#xff0c;被其他挡住了。 :deep(.el-tooltip){position: relative;z-index:9; } <el-table-column label"用款渠…...

研究人员发现特斯拉汽车能被越狱,可免费解锁付费功能

Bleeping Computer 网站披露&#xff0c;柏林工业大学&#xff08;Technical University of Berlin&#xff09;的研究人员开发出一种新技术&#xff0c;可以破解特斯拉近期推出所有车型上使用的基于 AMD 的信息娱乐系统&#xff0c;并使其运行包括付费项目在内的任何软件。 实…...

【设计模式】责任链的基本概念及使用Predicate灵活构造校验链

文章目录 1. 概述1.1.背景1.2.责任链模式的概念 2.责任链的基本写法2.1.链表实现2.2.数组实现 3.Predicate校验链2.1.使用Predicate改写代码2.1.更丰富的条件拓展 4.总结 1. 概述 1.1.背景 在最近的开发中遇到了这么一个需求&#xff0c;需要对业务流程中的各个参数做前置校验…...

Taro保存图片到手机

萌新亚历山大啊&#xff0c;搞了一下午&#xff0c;真多坑 Taro.downloadFile({url: res,filePath: Taro.env.USER_DATA_PATH /xcxcode.jpg,success: res > {if (res.statusCode 200) {console.log(res)const tempFilePath res.filePath; // 获取下载的临时文件路径// …...

zookeeper --- 基础篇

一、zookeeper简介 1.1、什么是zookeeper zookeeper官网&#xff1a;https://zookeeper.apache.org/ 大数据生态系统里的很多组件的命名都是某种动物或者昆虫&#xff0c;他是用来管 Hadoop&#xff08;大象&#xff09;、Hive(蜜蜂)、Pig(小 猪)的管理员。顾名思义就是管理…...

Golang map 常用方法

文章目录 前言按key排序按value排序统计字符串中元素重复出现次数并将结果排序返回 前言 由于map是无序的&#xff0c;所以排序成 slice 返回&#xff0c;且都使用泛,代码只是示例&#xff0c;省略了错误判断 按key排序 package mainimport "fmt"func example[T c…...

用于视觉跟踪的在线特征选择研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Docker基本使用

查看本地镜像 查看本地&#xff1a;docker imagesPull镜像&#xff1a;docker pull nginx:latest登录镜像&#xff1a;docker login hub.docker.com -u **** -p ****制作镜像&#xff1a;docker build -t xxxx:v1push&#xff1a;docker push xxx:v1删除镜像:docker rmi #imag…...

PHP生成随机数

要在 PHP 中生成随机密码&#xff0c;可以使用 rand() 函数和字符串操作函数。以下是一个示例代码来生成包含字母、数字和特殊字符的随机密码 function generateRandomPassword($length 8) {// 定义包含字母、数字和特殊字符的字符集$characters abcdefghijklmnopqrstuvwxyz…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...