11 nacos 的 配置获取 和 服务注册

前言

nacos 在微服务体系中有两大个功能, 作为配置中心 和 服务发现 

最近碰到了一些 nacos 的相关问题, 整理了一下 这方面的东西 

nacos client 的配置读取

这一系列主要是在 NacosManager 这个 bean 的相关业务流程的过程中处理的

NacosManager 初始化的时候, 会向 nacos 登录, 如果配置的有 用户名密码信息, 才会发送 登录请求, 否则 不会

NacosManager 组合了一个 NacosConfigService, NacosConfigService 组合了一个 ServerHttpAgent

ServerHttpAgent 组合了一个 securityProxy, 由这个 securityProxy 来进行登录, 然后保存 token 

ServerHttpAgent 会定时请求登录接口, 以更新 token 信息, 主要是请求的服务 “/nacos/v1/auth/users/login”

登录成功之后, 保存 token 等等相关信息 

NacosConfigService 组合了一个 ClientWorker, ClientWorker 组合了上面的 ServerHttpAgent

然后由这个 ServerHttpAgent 来代理发送和 nacos 交互的相关请求 

然后 加载具体的业务配置这边, 是由框架驱动的, 比如这里的 NacosPropertySourceLocator, 主要是请求的服务 ”/nacos/v1/cs/configs”

ClientWoker 中增加了配置信息的长轮训处理, 请求的服务是 “/nacos/v1/cs/configs/listener” 然后 如果有服务配置发生了改变, 会自动重新拉取配置, 更新配置 

ClientWorker$ LongPollingRunnable 是一直在执行

服务器这边 长轮训处理如下, 客户端这边传过来的默认的超时时间为 30s

所以可以理解为 ClientWorker$ LongPollingRunnable 小于 30s 会调用一次 

nacos client 的服务发现 

初始化 NacosServiceManager 的过程中, 初始化的这一系列组件

NacosNamingService 组合了 NamingProxy

NamingProxy 组合了一个 SecurityProxy

在 NamingProxy 的构造方法中处理的 登录相关处理, 和上面一样 是基于 SecurityProxy

登录之后 SecurityProxy 保存 accessToken, 然后 下一次的请求发送 携带上 accessToken

其他业务请求, 比如这里 访问了 “/nacos/v1/ns/instance/list” 来更新维护当前服务相关的实例的元数据 

HostReactor 初始化的时候增加了一个 更新当前服务的 定时任务, 调用的是 HostReactor$UpdateTask, 里面会调用 “/nacos/v1/ns/instance/list” 来更新服务信息 

默认是 1秒, 不超过 60 秒, 会随着失败次数 调用频率降低, 具体的逻辑在 HostReactor$UpdateTask.run 中

在当前 上下文初始化完成之后, 会向 nacos 注册当前机器 

然后 服务启动了之后 BeatReactor 添加了心跳的任务

心跳的处理中, 如果发现 服务已经下线了, 会自动注册当前服务 

默认的周期是 5s, 然后 可通过 “preserved.heart.beat.interval”配置

如果发现 服务已经下线了, 会自动注册当前服务

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

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

相关文章

iOS 二进制重排

原理:减少page fault次数,将启动用到的代码都放到一个page里。 操作: 统计启动过程中用到的函数。 http://yulingtianxia.com/blog/2019/09/01/App-Order-Files/ Other C flag里加上-fsanitize-coveragefunc,trace-pc-guard,C/C…

力扣HOT100 - 48. 旋转图像

解题思路&#xff1a; 要求原地旋转 可以先上下翻转&#xff0c;再沿主对角线反转&#xff08;左上到右下的对角线&#xff09; class Solution {public void rotate(int[][] matrix) {int n matrix.length;// 上下翻转for (int i 0; i < n / 2; i) {for (int j 0; j &…

软考学习之路-系统集成项目管理工程师-考试要点记录1

软考学习之路-系统集成项目管理工程师-考试要点记录 前言介绍必考知识点1、项目管理五大过程组启动过程组规划规程组执行过程组监控过程组收尾过程组 2、项目整合管理3、项目范围管理4、项目时间管理5、项目成本管理6、项目质量管理7、人力资源管理8、项目沟通管理9、项目风险管…

YOLOv9最新改进系列:YOLOv9融合BoTNet模块,融合CNN+自然语言处理技术的优势,有效提升检测效果!

YOLOv9最新改进系列&#xff1a;YOLOv9融合BoTNet模块&#xff0c;融合CNN自然语言处理技术的优势&#xff0c;有效提升检测效果&#xff01; YOLOv9原文链接戳这里&#xff0c;原文全文翻译请关注B站Ai学术叫叫首er B站全文戳这里&#xff01; 详细的改进教程以及源码&…

LangChain - LLMs

文章目录 一、LLMs vs 聊天模型二、入门1、设置 OpenAI2、__call__: string in -> string out3、generate: batch calls, richer outputs 三、异步 API四、Custom LLM五、Fake LLM六、Human input LLM七、缓存 llm_caching1、内存缓存&#xff08;In Memory Cache&#xff0…

vue简单使用三(class样式绑定)

目录 对象的形式绑定&#xff1a; 数组的形式绑定&#xff1a; 内联样式Style 对象的形式绑定&#xff1a; 可以看到class中有两个值 数组的形式绑定&#xff1a; 可以看到也有两个值 内联样式Style style样式设置成功 完整代码&#xff1a; <!DOCTYPE html> <html…

QT 信号与槽的简单使用

文章目录 1.通过Singloat and Slots Editor 添加信号与槽2. 通过拖动动态添加3.通过转到槽方式添加&#xff08;自动关联&#xff09;4. 自定义信号与槽&#xff08;connect)4.1 connect方式4.2 自定义信号 1.通过Singloat and Slots Editor 添加信号与槽 点添加&#xff0c;然…

数据库:SQL分类之DML详解

1.添加数据&#xff08;insert&#xff09; 1.给指定字段添加数据 insert into 表名 (字段1&#xff0c;字段2&#xff0c;...) values (值1,值2,...); 例&#xff1a; insert into employee(id, worknumber, name, gender, age, identifynumber, worktime) values(1,1,itc…

nginx反向代理conf

打开nginx配置。 对登录功能测试完毕后&#xff0c;接下来&#xff0c;我们思考一个问题&#xff1a;前端发送的请求&#xff0c;是如何请求到后端服务的&#xff1f; 前端请求地址&#xff1a;http://localhost/api/employee/login 后端接口地址&#xff1a;http://localho…

学习Rust的第三天:猜谜游戏

Welcome to the third day of learning rust, I am referring to the book “The Rust Programming Language” by Steve Klabnik. Today we build a guessing game in rust. 欢迎来到学习Rust的第三天&#xff0c;基于Steve Klabnik的《The Rust Programming Language》一书。…

【Java】线程这个包裹的配送过程(线程生命周期)

理解版 如果要形象地理解线程从创建到终止的整个生命周期。我们可以把线程执行理解成一个包裹的运送过程。 包裹揽收&#xff08;New&#xff09;: 就像快递员接收到一个新的包裹&#xff0c;准备开始派送过程&#xff0c;线程在new关键字的作用下被创建。 CourierThread couri…

C语言经典例题(22) --- 学生基本信息输入输出、判断字母、字符金字塔、ASCII码、出生日期输入输出

文章目录 1.学生基本信息输入输出2.判断字母3.字符金字塔4.ASCII码5.出生日期输入输出 1.学生基本信息输入输出 题目描述&#xff1a; 依次输入一个学生的学号&#xff0c;以及3科&#xff08;C语言、数学、英语&#xff09;成绩&#xff0c;在屏幕上输出该学生的学号&#x…

云架构(四)异步请求-应答模式

Asynchronous Request-Reply pattern - Azure Architecture Center | Microsoft Learn 把后台处理和前端解耦&#xff0c;后台处理需要异步处理&#xff0c;但是也需要给前端一个清晰的回应。 背景和问题 在现代应用开发中&#xff0c;代码通常在浏览器中运行&#xff0c;依…

【C#】 删除首/尾部字符

代码 static void Main(string[] args){string str "123abc";string strdelete "abc";string str1 str.Trim(1);string strc str1.Trim(c);string str11 str1.TrimStart(1);string strcc str1.TrimEnd(c);string strabc str.Trim(strdelete.ToCharA…

Sorting Algorithms in Python (排序算法)

本篇文章主要介绍几种经典排序算法&#xff1a;冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、桶排序和基数排序。并给出用python实现的算法代码。 目录 一、冒泡排序 二、快速排序 三、选择排序 四、堆排序 五、插入排序 六、希尔排序 七、归…

(非技术) 基因遗传相关知识学习笔记

目录 一、基因遗传名词解释 二、什么叫显性遗传和隐性遗传&#xff1f; 三、如何确定遗传性质呢&#xff1f;是显性还是隐性&#xff1f; 四、常规例子1&#xff1a; 五、常规例子2&#xff1a; 六、实际案例&#xff1a; 七、思考题&#xff1a; 八、参考&#xff1a; …

智慧InSAR专题———模拟数据实现现实场景异常形变点识别(项目讲解)

续上篇 文章目录 &#xff08;一项技术的复现&#xff0c;我们应该有打破砂锅问到底的态度&#xff0c;我找到了这篇文章的一些灵感来源&#xff0c;包括算法和编程以及专业知识等&#xff0c;对我而言也是受益匪浅&#xff09;1. 数据准备1.1 A deep learning approach to de…

MySQL选择普通索引还是唯一索引(2/16)

普通索引和唯一索引 基本概述 MySQL中可以创建普通索引与唯一索引&#xff0c;这两种索引的区别是&#xff1a; 普通索引&#xff08;Non-Unique Index&#xff09;&#xff0c;也称为非唯一索引&#xff0c;它允许索引中的条目具有重复的键值。普通索引的主要目的是加快查询…

Android MTK 屏下指纹的调试过程记录

Demo链接 -----> https://download.csdn.net/download/u011694328/89118346 一些品牌手机都有了屏下指纹的功能&#xff0c;还算是个比较新颖的功能&#xff0c;最近有项目需要使用屏下指纹&#xff0c; 使用的是汇顶&#xff08;Goodix&#xff09;的指纹方案&#xff0c…

leetcode682-Baseball Game

题目&#xff1a; 你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成&#xff0c;过去几回合的得分可能会影响以后几回合的得分。 比赛开始时&#xff0c;记录是空白的。你会得到一个记录操作的字符串列表 ops&#xff0c;其中 ops[i] 是你需要记录的第 i 项…