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>
posted @ 2022-08-03 23:55  ah_lydms  阅读(624)  评论(0编辑  收藏  举报