Nacos—配置管理

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Nacos—配置管理

一、资源

1、代码

CSDN

https://download.csdn.net/download/weixin_44624117/35877729

2、参考资源

B站视频源:

https://www.bilibili.com/video/BV1VJ411X7xX?p=1

文件:

https://download.csdn.net/download/weixin_44624117/35878702

二、概要

1、简介

Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。

2、主流配置中心对比

目前市面上用的比较多的配置中心有:Spring Cloud Confifig、Apollo、Nacos和Disconf等。

官网

https://nacos.io/

3、特点

  1. 服务发现与服务健康检查
    Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防 止向不健康的主机或服务实例发送请求。
  2. 动态配置管理
    动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新 部署应用程序,这使配置的更改更加高效和灵活。
  3. 动态DNS服务
    Nacos提供基于DNS 协议的服务发现能力,旨在支持异构语言的服务发现,支持将注册在Nacos上的服务以 域名的方式暴露端点,让三方应用方便的查阅及发现。
  4. 服务和元数据管理
    Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周 期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略。 这里动态配置管理的特性说明了Naocs的配置管理能力。

三、安装服务

1、安装JDK

Linux(centos 7.5)服务器安装JDK(1.8)

2、安装Maven

Maven在Windows和Linux下安装

3、安装Nacos

下载地址

https://github.com/alibaba/nacos/releases/tag/1.4.2

服务器下载

wget https://codechina.csdn.net/weixin_44624117/software/-/raw/master/software/nacos-server-1.4.2.tar.gz

解压文件

tar -zxvf /root/nacos-server-1.4.2.tar.gz -C /usr/local/

进入启动目录

cd /usr/local/nacos/bin/

启动服务(单机)

sh ./startup.sh -m standalone

页面访问地址:

http://8.131.239.157:8848/nacos/index.html

默认账号密码(默认:nacos)

nacos

4、Open API方式测试Nacos

通过dataIdgroup,共同获取conten。

  • dataId
  • group
  • content

1、存入数据

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"

刷新页面查看结果:

1、获取配置

curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

5、更换MySQL存储数据

1.新创建数据库 nacos_config

2.执行建表sql文件

文件位置

/usr/local/nacos/conf/nacos-mysql.sql

3.3.修改${nacoshome}/conf/application.properties文件,增加支持mysql数据源配置

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=1581145

修改配置文件:

vim /usr/local/nacos/conf/application.properties

3.4重启Nacos

cd /usr/local/nacos/bin/
sh ./shutdown.sh
sh ./startup.sh -m standalone

重新登录刷新页面既可。

6 可能出现问题

6.1 NoClassDefFoundError: slf4j

版本过高,依赖日志文件没找到,降低依赖的版本既可。

解决方式:

<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>1.1.3</version>
</dependency>
6.2 endpoint is blank
Exception in thread "main" ErrCode:-400, ErrMsg:endpoint is blank

地址没找到Nacos地址,serverAdder写错了。

解决方式

Properties properties = new Properties();
properties.put("serverAdder",serverAddr);

四、Nacos配置概述

4.1 配置管理模型

命名空间(Namespace)(默认Public)

命名空间(namespace)可用于进行不同环境的配置隔离。例如可以隔离开发环境、测试环境和生产环境,因为它们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通过namespace隔离。不同的命名空间下,可以存在相同名称的配置分组(Group) 或 配置集。

配置分组(Group)

配置分组是对配置集进行分组,通过一个有意义的字符串(如 Buy 或 Trade )来表示,不同的配置分组下可以有相同的配置集(Data ID)。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:可用于区分不同的项目或应用,例如:学生管理系统的配置集。可以定义一个group为:STUDENT_GROUP

配置集(Data ID)

在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。每个配置集都可以定义一个有意义的名称,就是配置集的ID即Data ID。

配置项

配置集中包含的一个个配置内容就是配置项。它代表一个具体的可配置的参数与其值域,通常以 key=value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。

最佳实践:

Namespace:代表不同环境,如开发、测试、生产环境。

Group:代表某项目,如XX医疗项目、XX电商项目

DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件

获取某配置集代码:

// 初始化配置服务,
String serverAddr = "127.0.0.1:8848";
//指定命名空间(默认public)
String namespace = "ee247dde‐d838‐425c‐b371‐029dab26232f";
//开发环境 
String group = "DEFAULT_GROUP";
//默认组 
String dataId = "nacos‐simple‐demo.yaml";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
properties.put("namespace", namespace);
ConfigService configService = NacosFactory.createConfigService(properties);
//获取配置,并输出控制台 
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);

4.2 命名空间管理

1.隔离设计

namespace 的设计是 nacos 基于此做多环境以及多租户(多个用户共同使用nacos)数据(配置和服务)隔离的。

  • 从一个租户(用户)的角度来看:如果有多套不同的环境,那么这个时候可以根据指定的环境来创建不同的
    namespce,以此来实现多环境的隔离。
  • 从多个租户(用户)的角度来看:每个租户(用户)可能会有自己的 namespace,每个租户(用户)的配置数据以及注
    册的服务数据都会归属到自己的 namespace 下。

2.新建命名空间

命名空间(Namespace)是用于隔离多个环境的(如开发、测试、生产),而每个应用在不同环境的同一个配置(如数据库数据源)的值是不一样的。因此,我们应针对企业项目实际研发流程、环境进行规划。如某软件公司拥有开发、测试、生产三套环境,那么我们应该针对这三个环境分别建立三个namespace。

4.3 配置管理

4.3.1 配置列表

1. 多配置格式编辑器

Nacos支持 YAML、Properties、TEXT、JSON、XML、HTML 等常见配置格式在线编辑、语法高亮、格式校验,帮助用户高效编辑的同时大幅降低格式错误带来的风险。

2. 编辑DIFF

Nacos支持编辑DIFF能力,帮助用户校验修改内容,降低改错带来的风险。

3. 导出配置集合

4. 导入配置集合

5. 配置集克隆

点击左下角 克隆 按钮,将会弹出克隆对话框,此功能可用于将配置迁移到其他Namespace

4.3.2 历史版本

Nacos通过提供配置版本管理及其一键回滚能力,帮助用户改错配置的时候能够快速恢复,降低微服务系统在配置管理上的可用性风险。

需要输入Data IDGroup,查询历史版本。

回滚历史版本

4.3.3 监听查询

添加守护线程,监听Nacos当前配置是否变更,假如有变化,则推送到服务器中。

package com.lydms.nacos;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;
import java.util.Properties;
import java.util.concurrent.Executor;
public class dmo02 {
    public static void main(String[] args) throws NacosException {
        String serverAddr = "127.0.0.1:8848";
        String dataId = "com.lydms";
        String group = "DEFAULT_GROUP";
        Properties properties = new Properties();
        properties.put("serverAdder", serverAddr);
        ConfigService configService = NacosFactory.createConfigService(properties);
        String config = configService.getConfig(dataId, group, 5000);
        System.out.println(config);
//添加监听String dataId, String group, Listener listener(开启守护线程)
        configService.addListener(dataId, group, new Listener() {
            public Executor getExecutor() {
                return null;
            }
            public void receiveConfigInfo(String s) {
//                当配置发生变化时相应
                System.out.println(s);
            }
        })
        ;
//        测试让主线程不退出,因为订阅配置是守护线程,主线程退出守护线程就会退出。正式代码中无需下面代码
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

当Nacos页面进行数据修改时,会推送到服务器上。

4.4 登录管理

Nacos当前版本支持简单的登录功能,默认用户名/密码为: nacos/nacos

4.4.1 修改默认用户名/密码方法
  1. 生成加密密码

在入门程序中加入如下以来:

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>5.5.1</version>
</dependency>

编写PasswordEncoderUtil类,生成加密后的密码,采用BCrypt加密方法在每次生成密码时会加随机盐,所 以生成密码每次可能不一样。

package com.lydms.nacos.com.lydms.utils;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
public class PasswordEncoderUtil {
    public static void main(String[] args) {
//        $2a$10$sjlSLf3rVI0SlUkjunGWIecnow.XovvK61bzdHDiJIAAfzqpPrOLK
        System.out.println(new BCryptPasswordEncoder().encode("123"));
    }
}

创建用户名或者密码的时候,用指定用户名密码即可。

将上边程序输出的密码更新到数据库。

INSERT INTO users ( username, PASSWORD, enabled )
VALUES
  ( 'nacos1', '$2a$10$SmtL5C6Gp2sLjBrhrx1vj.dJAbJLa4FiJYZsBb921/wfvKAmxKWyu', TRUE );
INSERT INTO roles ( username, role )
VALUES
  ( 'nacos1', 'ROLE_ADMIN' );
4.4.1 关闭登录功能

由于部分公司自己开发控制台,不希望被nacos的安全fifilter拦截。因此nacos支持定制关闭登录功能找到配置文件

${nacoshome}/conf/application.properties , 替换以下内容即可。

将下面这几项置为false既可

spring.security.enabled=false
management.security=false
security.basic.enabled=false
nacos.security.ignore.urls=/**

五、Nacos配置管理应用于分布式系统

  • 用户通过Nacos Server的控制台集中对多个服务的配置进行管理。
  • 各服务统一从Nacos Server中获取各自的配置,并监听配置的变化。

5.1、全部配置文件

server.port=8090
#配置名称
spring.application.name=service1
#配置文件
spring.cloud.nacos.config.file-extension=yaml
# 配置中心地址
spring.cloud.nacos.config.server‐addr=8.131.239.157:8848
#配置文件所属命名空间(namespace)
spring.cloud.nacos.config.namespace=9fd002c2-a268-4eaa-8ada-c42d52954e25
#配置文件所处组(group)
spring.cloud.nacos.config.group=TEST_GROUP
# 一、自定义扩展 Data Id
# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
spring.cloud.nacos.config.ext‐config[0].data-id=common01.properties
# 2、Data Id 不在默认的组,不支持动态刷新
spring.cloud.nacos.config.ext‐config[1].group=GLOBALE_GROUP
spring.cloud.nacos.config.ext‐config[1].data-id=common02.properties
# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.ext‐config[2].group=REFRESH_GROUP
spring.cloud.nacos.config.ext‐config[2].data-id=common03.properties
spring.cloud.nacos.config.ext‐config[2].refresh=true
# 二、自定义共享 Data Id
#多个共享 Data Id 的配置
spring.cloud.nacos.config.shared-dataids=common01.properties,common02.properties,common03.properties
#自动刷新配置
spring.cloud.nacos.config.refreshable-dataids=common01.properties

5.3、支持配置的动态更新

@value注解问题:

  • 在服务器端更新配置后,@value注解,不能及时同步Nacos服务器端的更新。
  • 需要采用注入配置文件上下文方式ConfigurableApplicationContext,进行数据同步。

1. 更新Nacos配置

2. 添加获取上下文

@GetMapping(value = "/configs")
public String getConfigs() {
    return applicationContext.getEnvironment().getProperty("common.name");
}

3. 更新后刷新页面

刷新页面后,发现服务器端配置更新以后,本地的配置也随时进行更新。

5.4、自定义namespace与group配置

nameSpace:默认使用的是 Nacos 上 Public 这个。

spring.cloud.nacos.config.namespace=b3404bc0‐d7dc‐4855‐b519‐570ed34b62d7

该配置必须放在 bootstrap.yml文件中。此外 spring.cloud.nacos.config.namespace 的值是 namespace对应的 id,id 值可以在 Nacos 的控制台获取。并且在添加配置时注意不要选择其他的 namespace,否则将会导致读取不到正确的配置。

在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 。如果

需要自定义自己的 Group,可以通过以下配置来实现:

group: 默认使用的是 DEFAULT_GROUP

spring.cloud.nacos.config.group=TEST_GROUP

5.5、自定义扩展的Data Id配置

Nacos Confifig可支持自定义 Data Id 的配置。

通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

  • spring.cloud.nacos.config.ext-config[n].data-id:配置来支持多个 Data Id 的配置。
  • spring.cloud.nacos.config.ext-config[n].group :配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
  • spring.cloud.nacos.config.ext-config[n].refresh :配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。

数据源:

新建3个配置文件的数据源文件。

更新配置文件:

server.port=8090
spring.application.name=service1
# 配置中心地址
spring.cloud.nacos.config.server‐addr=8.131.239.157:8848
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.namespace=9fd002c2-a268-4eaa-8ada-c42d52954e25
spring.cloud.nacos.config.group=TEST_GROUP
# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
spring.cloud.nacos.config.ext‐config[0].data-id=common01.properties
# 2、Data Id 不在默认的组,不支持动态刷新
spring.cloud.nacos.config.ext‐config[1].group=GLOBALE_GROUP
spring.cloud.nacos.config.ext‐config[1].data-id=common02.properties
# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.ext‐config[2].group=REFRESH_GROUP
spring.cloud.nacos.config.ext‐config[2].data-id=common03.properties
spring.cloud.nacos.config.ext‐config[2].refresh=true

编写获取配置文件内容代码;

package com.lydms.start;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SumCommon {
    @Autowired
    ConfigurableApplicationContext applicationContext;
    @GetMapping("/somecommon")
    public String someCommon() {
        String commonName01 = applicationContext.getEnvironment().getProperty("common.name01");
        String commonName02 = applicationContext.getEnvironment().getProperty("common.name02");
        String commonName03 = applicationContext.getEnvironment().getProperty("common.name03");
        return "commonName01: " + commonName01 + ", commonName02: " + commonName02 + ", commonName03: " + commonName03;
    }
}

结果:

当跟新完成3个文件数据源后,发现只有commonName03数值更新。

  • refresh配置了自动更新。
  • GLOBALE_GROUP默认组的数据也不更新。

5.6、自定义共享Data Id配置

  • spring.cloud.nacos.config.shared-dataids:支持多个共享 Data Id 的配置,多个之间用逗号隔开。
  • spring.cloud.nacos.config.refreshable-dataids:支持哪些共享配置的 Data Id 在配置变化时,应用中是否可动态刷新, 感知到最新的配置值,多个 Data Id 之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置的 Data Id 都不支持动态刷新。
  • 共享DataId的配置使用默认的group即DEFAULT_GROUP,common02.properties不属于 DEFAULT_GROUP。
  • 共享DataId的配置相比扩展的 Data Id 配置,它把group固定为DEFAULT_GROUP,建议使用扩展的 Data Id 配置,因为扩展的 Data Id 配置也可以实现共享DataId配置。
#多个共享 Data Id 的配置
spring.cloud.nacos.config.shared-dataids=common01.properties,common02.properties,common03.properties
#自动刷新配置
spring.cloud.nacos.config.refreshable-dataids=common01.properties

5.7、获取配置的优先级

  • A: 通过spring.cloud.nacos.config.shared-dataids支持多个共享 Data Id 的配置。
  • B: 通过spring.cloud.nacos.config.ext-config[n].data-id的方式支持多个扩展 Data Id 的配置,多个Data Id 同时配置时,他的优先级关系是spring.cloud.nacos.config.ext-config[n].data-id其中 n 的值越大,优先级越高。
  • C: 通过内部相关规则(应用名、扩展名 )自动生成相关的 Data Id 配置

=当三种方式共同使用时,优先级关系是:C > B >A 。

5.8、完全关闭配置

通过设置spring.cloud.nacos.confifig.enabled = false来完全关闭 Spring Cloud Nacos Confifig

spring.cloud.nacos.confifig.enabled = false

六、Nacos集群部署

6.1、集群部署

3个或3个以上Nacos节点才能构成集群。

1、修改集群配置问题

有nacos目录的conf目录下,有文件cluster.conf.example,将其命名为cluster.conf

# ip:port
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850

2、修改部署的端口IP(多台部署忽略)

server.port=8850
# 本机实际IP
nacos.inetutils.ip‐address=10.121.294.193

3、集群模式启动

cd /usr/local/nacos/bin

启动服务

sh ./startup ‐m cluster

4、部署成功结果展示

6.2、客户端配置

在配置中心地址中加入多个集群部署配置的IP:port既可。

#配置名称
spring.application.name=service1
#配置文件
spring.cloud.nacos.config.file-extension=yaml
# 配置中心地址
spring.cloud.nacos.config.server‐addr=8.131.239.157:8848,8.131.239.157:8849,8.131.239.157:8850

6.3、多数据库配置

于数据库,生产环境下建议至少主备模式。通过修改/conf/application.properties文件,能够使 nacos拥有多个数据源。

spring.datasource.platform=mysql
db.num=2
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&autoReconnect=true
db.url.1=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&autoReconnect=true db.user=root
db.password=root

七、代码中实现Nacos

7.1、初级入门

7.1.1 发布配置

新增配置信息:

查看增加的配置

7.1.2 Nacos客户端获取配置

需新建Maven项目项目获取配置

1、pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.lydms</groupId>
    <artifactId>nacos-start-dmo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client -->
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.1.3</version>
        </dependency>
    </dependencies>
</project>

2、代码

package com.lydms.nacos;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
import java.util.Properties;
public class start {
    public static void main(String[] args) throws NacosException {
        String serverAddr="127.0.0.1:8848";
        String dataId="com.lydms";
        String group="DEFAULT_GROUP";
        Properties properties = new Properties();
        properties.put("serverAddr",serverAddr);
        ConfigService configService = NacosFactory.createConfigService(properties);
        String config = configService.getConfig(dataId, group, 5000);
        System.out.println(config);
    }
}

7.2、分布式应用配置管理

7.2.1 页面配置

新增Service1的Nacos配置:

Namespace: c67e4a97‐a698‐4d6d‐9bb1‐cfac5f5b51c4 #开发环境
Data ID: service1.yaml
Group : TEST_GROUP
配置格式: YAML
配置内容: common:
name: service1 config

页面:

7.2.2 代码配置

1. bootstrap.yaml

server:
  port: 8090 #启动端口 命令行注入
spring:
  application:
    name: service1
  cloud:
    nacos:
      config:
        #enabled: false #关闭配置
        server-addr: 8.131.239.157:8848  # 配置中心地址
        file-extension: yaml #dataid 的名称就是application的name加file-extension   service1.yaml
        namespace: 9fd002c2-a268-4eaa-8ada-c42d52954e25 # 开发环境  指定 具体的namespace
        group: TEST_GROUP # 测试组

2. pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.lydms</groupId>
    <artifactId>service1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
    </dependencies>
</project>

3. 启动类

package com.lydms.start;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class startUp {
    @Value("${common.name}")
    private String commonName;
    public static void main(String[] args) {
        SpringApplication.run(startUp.class, args);
    }
    @GetMapping("/test")
    public String getConfigName() {
        System.out.println(commonName);
        return commonName;
    }
}

4. 页面请求结果

八、问题及建议

1、生产部署建议

下图是官方推荐的集群方案,通过域名 + VIP模式的方式来实现。客户端配置的nacos,当Nacos集群迁移时,客户端配置无需修改。

2、启动3个报错

启动2个没有问题,启动3个就有问题。

原因:

JVM内存占用过大,2个服务器还够用,单台启动多个就不够用。

解决:

修改启动时JVM配置。

JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
    JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
    if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
        JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
    fi
    JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"

3、无法获取配置文件

当配置完成以后,配置文件更新为bootstrap.yml后,还是无法获取nacos中配置文件。

可能是bootstrap加载有问题,使用重写bootstrap加载依赖,就能完成配置文件导入。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
246 0
|
11天前
|
数据管理 Nacos 开发者
"Nacos架构深度解析:一篇文章带你掌握业务层四大核心功能,服务注册、配置管理、元数据与健康检查一网打尽!"
【10月更文挑战第23天】Nacos 是一个用于服务注册发现和配置管理的平台,支持动态服务发现、配置管理、元数据管理和健康检查。其业务层包括服务注册与发现、配置管理、元数据管理和健康检查四大核心功能。通过示例代码展示了如何在业务层中使用Nacos,帮助开发者构建高可用、动态扩展的微服务生态系统。
43 0
|
4月前
|
Java 数据库连接 Nacos
nacos配置管理拉取不到配置异常
在搭建Nacos配置时遇到异常,因配置了`file-extension: yaml`,服务尝试拉取`shared-jdbc.yaml`, `shared-log.yaml`, `shared-swagger.yaml`,但Nacos中这些共享配置的Data ID无后缀。修正方法是确保Data ID与预期文件名一致,包括.yaml扩展名。在验证中,修改了部分Data ID并导致服务因找不到未加后缀的`jdbc`配置而报错,提示在配置Data ID时应包含文件扩展名。
174 1
|
5月前
|
Java Nacos 数据格式
Spring Cloud Nacos 详解:服务注册与发现及配置管理平台
Spring Cloud Nacos 详解:服务注册与发现及配置管理平台
186 3
|
5月前
|
开发框架 .NET Nacos
使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现
使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现
458 0
|
5月前
|
SpringCloudAlibaba 安全 Java
SpringCloudalibaba之Nacos的配置管理
如图所示,nacos-config-example被192.168.56.1获取过。
163 0
|
6月前
|
负载均衡 Nacos 数据库
【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置
【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置
143 1
|
6月前
|
负载均衡 Java Nacos
Nacos作为一个服务发现与配置管理工具,它本身不直接依赖于`ribbon-loadbalancer`包
Nacos作为一个服务发现与配置管理工具,它本身不直接依赖于`ribbon-loadbalancer`包【1月更文挑战第18天】【1月更文挑战第89篇】
75 4
|
6月前
|
Java 数据库连接 Nacos
Nacos作为一个服务发现和配置管理平台
Nacos作为一个服务发现和配置管理平台【1月更文挑战第18天】【1月更文挑战第88篇】
79 4
|
6月前
|
应用服务中间件 Nacos 数据库
【微服务】4、NACOS 配置管理
【微服务】4、NACOS 配置管理
103 0