Nacos配置中心不可用会有什么影响

news2025/2/28 3:14:03

服务端:

Nacos的数据存储接口

com.alibaba.nacos.config.server.service.DataSourceService

有两种实现:

如果指定了mysq 作为数据库,则必须使用 mysql 

如果是 集群方式部署Nacos,则必须使用mysql

如果是单例方式部署 并且 没有指定 mysql作为数据库,则使用 Apache derby 数据库(内嵌)

可以使用多个数据库。实例化后 会选择一个可用的数据库作为主库,并启动定时任务 检查数据库健康状态。

Nacos配置中心采用mysql 进行配置持久化,在Nacos服务启动后,会读取配置数据,加载到内存中 并写入磁盘文件。

磁盘文件为:

如果没有指定namespace,则:

/data/config-data/group/ 各种dataId 文件

如果存在指定的namespace,则:

/data/tenant-config-data/namespace/各种dataId 文件

因此,如果是 mysql 不可用,Nacos 会出现启动失败的情况。

如果Nacos启动成功,后续mysql 不可用,那么 配置数据 是可以拿到的,但是 其他需要直接和mysql交互的功能无法使用。这种情况,不影响 客户端使用。只不过 无法更新配置。

客户端:

客户端在启动时,首先会去服务端加载配置:

com.alibaba.cloud.nacos.client.NacosPropertySourceLocator#locate

com.alibaba.cloud.nacos.client.NacosPropertySourceLocator#loadNacosDataIfPresent

加载到配置后,会将配置数据写到Map中:

com.alibaba.cloud.nacos.NacosPropertySourceRepository#NACOS_PROPERTY_SOURCE_REPOSITORY 

在客户端启动完成时,spring boot 会发送一个 事件,ApplicationReadyEvent,

com.alibaba.cloud.nacos.refresh.NacosContextRefresher 会监听该事件。

private void registerNacosListenersForApplications() {
		if (refreshProperties.isEnabled()) {
			for (NacosPropertySource nacosPropertySource : NacosPropertySourceRepository
					.getAll()) {

				if (!nacosPropertySource.isRefreshable()) {
					continue;
				}

				String dataId = nacosPropertySource.getDataId();
				registerNacosListener(nacosPropertySource.getGroup(), dataId);
			}
		}
	}

 如上代码,如果 当前的属性配置,支持自动刷新,则会注册一个 监听器。

private void registerNacosListener(final String group, final String dataId) {

		Listener listener = listenerMap.computeIfAbsent(dataId, i -> new Listener() {
			// 处理配置更新逻辑
		});

		try {
            // 注册事件监听
			configService.addListener(dataId, group, listener);
		}
		catch (NacosException e) {
			e.printStackTrace();
		}
	}

注册监听器的时候,会把配置项信息 添加到

com.alibaba.nacos.client.config.impl.ClientWorker#cacheMap

客户端会有一个定时任务执行 

com.alibaba.nacos.client.config.impl.ClientWorker#checkConfigInfo

这个定时任务,会定时去nacos服务端检查配置 是否更新,通过MD5比较。

如果配置更新,则会通知 前面注册的listener 去nacos服务端拉取最新的配置,并完成本地配置更新。 

 如果Nacos服务不可用,那么微服务应用会报异常吗?

1. 微服务应用在读取配置时,首先读取的是本地数据。本地数据是存储在 磁盘文件中的。

    public static final String LOCAL_FILEROOT_PATH;
    public static final String LOCAL_SNAPSHOT_PATH;

    static {
        LOCAL_FILEROOT_PATH = System.getProperty("JM.LOG.PATH", System.getProperty("user.home")) + File.separator
            + "nacos" + File.separator + "config";
        LOCAL_SNAPSHOT_PATH = System.getProperty("JM.SNAPSHOT.PATH", System.getProperty("user.home")) + File.separator
            + "nacos" + File.separator + "config";
        LOGGER.info("LOCAL_SNAPSHOT_PATH:{}", LOCAL_SNAPSHOT_PATH);
    }

基本上不会配置这个JM.XX.XX,所以 配置存储在磁盘中的目录就是 user.home 目录下 

2. 如果本地缓存文件不存在,则读取Nacos配置中心的配置

当读取到配置文件后,会把数据写到本地快照文件中。

因此,如果 nacos服务端不可用,客户端并不影响(前提是 客户端已经读取过文件)

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

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

相关文章

【因果推断python】37_断点回归3

目录 羊皮效应和模糊 RDD(Fuzzy RDD) 麦克雷测试(McCrary Test) 关键思想 羊皮效应和模糊 RDD(Fuzzy RDD) 关于教育对收入的影响,经济学有两种主要观点。第一个是广为人知的论点,…

springboot应用cpu飙升的原因排除

1、通过top或者jps命令查到是那个java进程, top可以看全局那个进程耗cpu,而jps则默认是java最耗cpu的,比如找到进程是196 1.1 top (推荐)或者jps命令均可 2、根据第一步获取的进程号,查询进程里那个线程最占用cpu,发…

C++ | Leetcode C++题解之第168题Excel表列名称

题目: 题解: class Solution { public:string convertToTitle(int columnNumber) {string ans;while (columnNumber > 0) {--columnNumber;ans columnNumber % 26 A;columnNumber / 26;}reverse(ans.begin(), ans.end());return ans;} };

计算机组成原理---Cache的基本工作原理习题

对应知识点: Cache的基本原理 1.某存储系统中,主存容量是Cache容量的4096倍,Cache 被分为 64 个块,当主存地址和Cache地址采用直接映射方式时,地址映射表的大小应为()(假设不考虑一致维护和替…

C#.Net筑基-类型系统②常见类型

01、结构体类型Struct 结构体 struct 是一种用户自定义的值类型,常用于定义一些简单(轻量)的数据结构。对于一些局部使用的数据结构,优先使用结构体,效率要高很多。 可以有构造函数,也可以没有。因此初始…

SpringCloud Alibaba Sentinel 流量控制之流控模式实践总结

官网文档:https://sentinelguard.io/zh-cn/docs/flow-control.html wiki地址:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6 本文版本:spring-cloud-starter-alibaba:2.2.0.RELEASE 如下图所…

【归并排序】| 详解归并排序 力扣912

🎗️ 主页:小夜时雨 🎗️专栏:归并排序 🎗️如何活着,是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/sort-an-array/ 我们上道题讲过归并排序的核心代码&a…

idea 创建properties文件,解决乱码

设置properties文件编码 点击file->Settings File Encodings->设置utf-8 重新创建.properties文件才生效

MySQL的自增 ID 用完了,怎么办?

MySQL 自增 ID 一般用的数据类型是 INT 或 BIGINT,正常情况下这两种类型可以满足大多数应用的需求。 当然也有不正常的情况,当达到其最大值时,尝试插入新的记录会导致错误,错误信息类似于: ERROR 167 (22003): Out o…

算法期末整理(正在更新中)

一 算法概述 算法的概念 通俗地讲,算法是指解决问题的一种方法或一个过程。更严格地讲,算法是由若干条指令组成的有穷序列。 算法的性质 1.输入:有0个或多个由外部提供的量作为算法的输入。 2.输出:算法产生至少一个量作为输出。…

【机器学习300问】126、词嵌入(Word Embedding)是什么意思?

人类的文字,作为一种高度抽象化的符号系统,承载着丰富而复杂的信息。为了让电脑也能像人类一样理解并处理这些文字,科学家们不断探索各种方法,以期将人类的语言转化为计算机能够理解的格式。 一、One-Hot编码的不足 在自然语言处…

每月策略会议

周一顾问策略会议,对于企业辅导而言,领导力是可以培训的,而决策力不是靠培训就能达成,是需要反复训练和反思。从最为关心的一个状况出发,去行动才会有结果,有了结果反思我们的假设是否有盲区是否有误才有可…

LVGL开发教程-Grid(网格布局)

系列文章目录 知不足而奋进 望远山而前行 目录 系列文章目录 文章目录 前言 1. 常用方法 2. 代码实现 总结 前言 网格布局(Grid Layout)是一种强大的布局方式,它允许将项目按照行和列的二维表格方式进行排列。LVGL(Little…

分布式之日志系统平台ELK

ELK解决了什么问题 我们开发完成后发布到线上的项目出现问题时(中小型公司),我们可能需要获取服务器中的日志文件进行定位分析问题。但在规模较大或者更加复杂的分布式场景下就显得力不从心。因此急需通过集中化的日志管理,将所有服务器上的日志进行收集汇总。所以ELK应运而生…

Android Glide, first start based on loadThumbnail, Kotlin(二)

Android Glide, first start based on loadThumbnail, Kotlin(二) Android Glide, first start based on loadThumbnail, Kotlin(一)中有个小问题,通过loadThumbnail()采集到的缩略图真的就是整张图片的完整缩略图&…

NET Core C# 中的Action委托:语法、用法和示例_2024-06-19

Action委托是一个内置的泛型委托类型。此委托使您的程序更具可读性和效率,因为您无需定义自定义委托,如以下示例所示。 它在 System 命名空间下定义。它没有输出参数,输入参数最少为 1 个,最多为 16 个。 Action委托通常用于具有…

高压电阻器支持牙科 X 射线成像的准确性

为了捕获患者牙齿和颌骨的足够图像,牙医依靠锥形束计算机断层扫描 (CBCT) 系统的先进 3D 成像。CBCT系统的输出对于准确诊断口腔健康问题和随后的治疗计划至关重要。为了确保这些图像的可靠性,CBCT系统制造商利用了Exxelia Ohmcra…

【bug】配置SpringCloudAlibaba AI的maven依赖问题

问题描述 尝鲜alibaba的ai模块,maven依赖一直报找不到包,报错如下 Unresolved dependency: org.springframework.ai:spring-ai-core:jar:0.8.1原因分析: 由于是按照官方文档配置的,所以检查了很多遍maven配置,加上去…

给电脑bios主板设置密码

增强安全性:防止未经授权的人员更改 BIOS 中的重要设置,如启动顺序、硬件配置等。这有助于保护计算机系统的稳定性和数据的安全性。防止恶意篡改:阻止可能的攻击者或恶意软件通过修改 BIOS 设置来破坏系统或获取敏感信息。数据保护&#xff1…

阿里云 debian10.3 sudo apt-get updat 报错的解决方案

阿里云全新的debian10.3(buster)镜像,却无法正常执行 sudo apt-get update。主要报错信息如下: Err:6 http://mirrors.cloud.aliyuncs.com/debian buster-backports Release404 Not Found [IP: 100.100.2.148 80] Err:3 http://mirrors.cloud.aliyuncs…