哪些网站做的最有特色,个人网站租用服务器,企业一号wordpress主题,无锡哪里有做网站的服务端#xff1a;
Nacos的数据存储接口 com.alibaba.nacos.config.server.service.DataSourceService 有两种实现#xff1a; 如果指定了mysq 作为数据库#xff0c;则必须使用 mysql
如果是 集群方式部署Nacos#xff0c;则必须使用mysql
如果是单例方式部署 并且 没…服务端
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服务端不可用客户端并不影响前提是 客户端已经读取过文件