Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

从多个租户(用户)的角度来看,每个租户(用户)可能会有自己的 namespace,每个租户(用户)的配置数据以及注册的服务数据都会归属到自己的 namespace 下,以此来实现多租户间的数据隔离。例如超级管理员分配了三个租户,分别为张三、李四和王五。分配好了之后,各租户用自己的账户名和密码登录后,创建自己的命名空间。如下图所示:

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

(2)、命名空间管理

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

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

建立好所有namespace后,在配置管理与服务管理模块下所有页面,都会包含用于切换namespace(环境)的tab按钮,如下图:

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

如果您在编写程序获取配置集过程中没有感知到这个参数的输入,那么 nacos 统一会使用一个默认的 namespace作为输入,nacos confifig 会使用一个空字符串作为默认的参数来初始化,对应界面上就是public命名空间。

Note: namesace 为 public 是 nacos 的一个保留空间,如果您需要创建自己的 namespace,不要和 public重名,以一个实际业务场景有具体语义的名字来命名,以免带来字面上不容易区分自己是哪一个namespace。

Note:在编写程序获取配置集时,指定的namespace参数一定要填写命名空间ID,而不是名称。

我们在命名空间DEV中创建一个配置文件

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

我们再次通过代码来获取配置。

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 SimpleDemoMain {
    public static void main(String[] args) throws NacosException {
        //nacos 地址
        String serverAddr = "localhost:8848";
        String namespace = "7f4b7d01-6c9e-4c9a-9707-3baa58bf7524"; //开发环境
        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);
    }
}

结果如下:

common:
    config1: someone

注意:如果打印的结果为null,重启nacos即可。傻屌nacos!!!

3、配置管理

Nacos支持基于Namespace和Group的配置分组管理,以便用户更灵活的根据自己的需要按照环境或者应用、模块等分组管理微服务的大量配置,在配置管理中主要提供了配置历史版本、回滚、订阅者查询等核心管理能力。

配置列表

(1)、配置集导出

勾选若干配置集,点击 导出选中的配置 ,可获得一个压缩包:

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

压缩包如下:

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

压缩包内,包含了选中配置集所转换的配置文件:

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

(2)、配置集导入

点击右上角的 导入配置 ,可选择导出的压缩包文件,将压缩包内的文件恢复为nacos配置集。

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

(3)、配置集克隆

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

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

我们也可以先导出配置集再导入配置集来实现克隆的效果。

历史版本

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

现在nacos-simple-demo.yaml中配置的内容为

common:
    config1: someone

我们修改为:

common:
    config1: someone like you

如果我们觉得改错了,可以点击历史版本,输入dataId和group进行查询。

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

点击回滚

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

点击”回滚配置”,回滚成功后再次查看配置如下:

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

说明回滚成功!

监听查询

Nacos提供配置订阅者即监听者查询能力(当服务端配置有变化时会通知客户端),同时提供客户端当前配置的MD5校验值,以便帮助用户更好的检查配置变更是否推送到 Client 端。

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
import java.util.Properties;
import java.util.concurrent.Executor;
import com.alibaba.nacos.api.config.listener.Listener;
public class SimpleDemoMain {
    public static void main(String[] args) throws NacosException {
        //nacos 地址
        String serverAddr = "localhost:8848";
        String namespace = "7f4b7d01-6c9e-4c9a-9707-3baa58bf7524"; //开发环境
        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);
        //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(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

运行上面的程序,控制台打印:

common:
    config1: someone

此时程序并没有停止。

点击”监听查询”,输入dataId和group进行查询

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

此时修改配置如下:

common:
    config1: someone hate you

发布后,控制台打印如下:

common:
    config1: someone
common:
    config1: someone hate you

这就验证了当服务端配置有变化,服务端就会推送到客户端。

4、登录管理

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

nocos-config数据库中的users表存的是bcypt加密后的密码,我们只需要将密码通过bcypt加密后替换users表中原来的密码即可。

修改默认用户名/密码方法

(1)、生成加密密码

在入门程序中加密所需的依赖,如下所示:

org.springframework.security
            spring-security-core
            5.1.6.RELEASE

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

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

public class PasswordEncoderUtil {
    public static void main(String[] args) {
        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');

关闭登录功能

由于部分公司自己开发控制台,不希望被nacos的安全fifilter拦截。因此nacos支持定制关闭登录功能找到配置文件${nacoshome}/conf/application.properties ,替换以下内容即可。

## spring security config ### turn off security spring.security.enabled=false management.security=false security.basic.enabled=false nacos.security.ignore.urls=/** #nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*. ico,/console‐ fe/public/**,/v1/auth/login,/v1/console/health,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**

增加上面红色的三行代码,修改nacos.security.ignore.urls为/**

这样,访问http://ip:8848/nacos就直接进入如下页面了:

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

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

1、从单体架构到微服务

单体架构

Web应用程序发展的早期,大部分web工程师将所有的功能模块打包到一起并放在一个web容器中运行,所有功能模块使用同一个数据库,同时,它还提供API或者UI访问的web模块等。

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

尽管也是模块化逻辑,但是最终它还是会打包并部署为单体式应用,这种将所有功能都部署在一个web容器中运行的系统就叫做单体架构(也叫:巨石型应用)。

单体架构有很多好处:

开发效率高:模块之间交互采用本地方法调用,并节省微服务之间的交互讨论时间与开发成本。

容易测试:IDE(集成开发环境)都是为开发单个应用设计的、容易测试——在本地就可以启动完整的系统。

容易部署:运维成本小,直接打包为一个完整的包,拷贝到web容器的某个目录下即可运行。

但是,上述的好处是有条件的,它适用于小型简单应用,对于大规模的复杂应用,就会展现出来以下的不足:

复杂性逐渐变高,可维护性逐渐变差 :所有业务模块部署在一起,复杂度越来越高,修改时牵一发动全身。

版本迭代速度逐渐变慢:修改一个地方就要将整个应用全部编译、部署、启动时间过长、回归测试周期过长。

阻碍技术创新:若更新技术框架,除非你愿意将系统全部重写,无法实现部分技术更新。

无法按需伸缩:通过冗余部署完整应用的方式来实现水平扩展,无法针对某业务按需伸缩。

微服务

许多大型公司,通过采用微服务架构解决了上述问题。其思路不是开发一个巨大的单体式的应用,而是将应用分解为小的、互相连接的微服务。

一个微服务一般完成某个特定的功能,比如订单服务、用户服务等等。每一个微服务都是完整应用,都有自己的业务逻辑和数据库。一些微服务还会发布API给其它微服务和应用客户端使用。

比如,根据前面描述系统可能的分解如下:

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

每一个业务模块都使用独立的服务完成,这种微服务架构模式也影响了应用和数据库之间的关系,不像传统多个业务模块共享一个数据库,微服务架构每个服务都有自己的数据库。

微服务架构的好处:

♦ 分而治之,职责单一;易于开发、理解和维护、方便团队的拆分和管理

♦ 可伸缩;能够单独的对指定的服务进行伸缩

♦ 局部容易修改,容易替换,容易部署,有利于持续集成和快速迭代

♦ 不会受限于任何技术栈

2、分布式应用配置管理

下图展示了如何通过Nacos集中管理多个服务的配置:

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

• 用户通过Nacos Server的控制台集中对多个服务的配置进行管理。

• 各服务统一从Nacos Server中获取各自的配置,并监听配置的变化。

我们将演示如何使用 Spring Cloud Alibaba Nacos Confifig在Spring Cloud应用中集成Nacos,通过Spring cloud原生方式快捷的获取配置内容。

Spring Cloud是什么:

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,集成最多的组件要属Netflflix公司,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

Spring Cloud Alibaba Nacos Config是什么:

Spring Cloud Alibaba Nacos Discovery是Spring Cloud Alibaba的子项目,而Spring Cloud Alibaba是阿里巴巴公司提供的开源的基于Spring cloud的微服务套件合集,它致力于提供微服务开发的一站式解决方案,可以理解为spring cloud是一套微服务开发的 标准 ,spring cloud alibaba与spring cloud Netflflix是实现。使用 Spring Cloud Alibaba方案,开发者只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。

由于Nacos是阿里的中间件,因此,若开发Spring cloud微服务应用,使用Spring Cloud Alibaba Nacos Config来集成Nacos的配置管理功能是比较明智的选择。

发布配置

首先在nacos发布配置,我们规划了两个服务service1、service2,并且想对这两个服务的配置进行集中维护。

浏览器访问 http://127.0.0.1:8848/nacos ,打开nacos控制台,并点击菜单配置管理->配置列表:

在Nacos添加如下的配置:

service1

Namespace: 4a65333c-2a01-4802-9a73-59a47e7d94ad #开发环境
Data ID: service1.yaml
Group : DEV_GROUP
配置格式: YAML
配置内容: common:
               name: service1 config

service2

Namespace: 4a65333c-2a01-4802-9a73-59a47e7d94ad #开发环境
Data ID: service2.yaml
Group : DEV_GROUP
配置格式: YAML
配置内容: common:
               name: service2 config

创建父工程

为了规范依赖的版本,这里创建父工程,指定依赖的版本。

先创建一个空工程nacos-config-parent,再创建一个父工程nacos-parent,删除src目录。父工程pom.xml如下:

UTF-8
        UTF-8
        1.8

                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.1.0.RELEASE
                pom
                import

                org.springframework.cloud
                spring-cloud-dependencies
                Greenwich.RELEASE
                pom
                import

                org.springframework.boot
                spring-boot-dependencies
                2.1.5.RELEASE
                pom
                import

                org.springframework.boot
                spring-boot-maven-plugin

创建service1和service2子模块

(1)、引入如下依赖:

com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config

            org.springframework.boot
            spring-boot-starter-web

(2)、编写bootstrap.yml文件

一般来说,spring boot的配置将在application.yml(也可以是application.properties)文件中编写,由于使用外部配置中心,必须将原先的application.yml重命名为bootstrap.yml,bootstrap.yml如下所示:

spring.cloud.nacos.confifig.server-addr 指定了Nacos Server的网络地址和端口号。

service1的配置

server:
  port: 56010
spring:
  application:
    name: service1
  cloud:
    nacos:
      config:
        server-addr: ip:8848
        file-extension: yaml
        namespace: 4a65333c-2a01-4802-9a73-59a47e7d94ad
        group: DEV_GROUP

以上配置文件说明该应用将从地址为127.0.0.1:8848配置中心获取配置,通过以下信息定位配置集:

namespace:c67e4a97‐a698‐4d6d‐9bb1‐cfac5f5b51c4 # 开发环境 group:TEST_GROUP # 测试组
Data Id:service1.yaml

service2的配置

server:
  port: 56020
spring:
  application:
    name: service2
  cloud:
    nacos:
      config:
        server-addr: ip:8848
        file-extension: yaml
        namespace: 4a65333c-2a01-4802-9a73-59a47e7d94ad
        group: DEV_GROUP

Note:spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,加载了以 dataid 为${spring.application.name}.${file-extension:properties} 的基础配置。对应以上的配置,它会去nacos server中加载data id为service1.yaml的配置集。

Note: 若没有指定spring.cloud.nacos.confifig.group配置,则默认为DEFAULT_GROUP。

需要注意的是spring boot 启动端口要避免重复,service2的端口为56020,spring.application.name为service2。

(3)、编写启动类

@SpringBootApplication
public class Service1Application {
    public static void main(String[] args) {
        SpringApplication.run(Service1Application.class,args);
    }
}

(4)、编写controller

@RestController
public class Config1Controller {
    @Value("${common.name}")
    private String config1;
    @GetMapping(value = "/configs")
    public String getConfigs(){
        return config1;
    }
}

(5)、启动service1和service2

浏览器访问:http://localhost:56010/configs,结果如下:

service1 config

浏览器访问:http://localhost:56020/configs,结果如下:

service2 config

支持配置的动态更新

基于上面快速上手的例子,若要实现配置的动态更新,只需要进行如下改造:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Config1Controller {
    @Value("${common.name}")
    private String config1;
    // 注入配置文件上下文
    @Autowired
    private ConfigurableApplicationContext applicationContext;
    @GetMapping(value = "/configs")
    public String getConfigs(){
//        return config1;
        return applicationContext.getEnvironment().getProperty("common.name");
    }
}

我们通过nacos控制台更新common.name的配置值,

common:
    name: service1 config add something new

再次访问web端点/confifigs,发现应用程序能够获取到最新的配置值,说明spring-cloud-starter-alibaba-nacos-confifig 支持配置的动态更新。

重启service1,浏览器访问:http://localhost:56010/configs,结果如下:

service1 config add something new

再次修改common.name的配置值,如下所示:’

common:
    name: service1 config add something new again

浏览器访问:http://localhost:56010/configs,结果如下:

service1 config add something new again

自定义 namespace与group配置

(1)、支持自定义 namespace的配置

在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下,默认使用的是 Nacos 上 Public 这个namespace。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring:  cloud:    nacos:      config:        namespace: 4a65333c-2a01-4802-9a73-59a47e7d94ad

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

(2)、支持自定义 Group 的配置

在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下,默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring:
  cloud:
    nacos:
      config:
        group: DEV_GROUP

Note:该配置必须放在 bootstrap.properties 文件中。并且在添加配置时 Group 的值一定要和spring.cloud.nacos.config.group 的配置值一致。

自定义扩展的 Data Id 配置

Spring Cloud Alibaba Nacos Confifig可支持自定义 Data Id 的配置。 一个完整的配置案例如下所示:

server:
  port: 56010
spring:
  application:
    name: service1
  cloud:
    nacos:
      config:
        server-addr: 114.115.246.152:8848
        file-extension: yaml
        namespace: 4a65333c-2a01-4802-9a73-59a47e7d94ad
        group: DEV_GROUP
        ext-config[0]:
          data-id: ext-config-common01.properties
        ext-config[1]:
          data-id: ext-config-common02.properties
          group: GLOBLE_GROUP
        ext-config[2]:
          data-id: ext-config-common03.properties
          group: REFRESH_GROUP
          refresh: true  #动态刷新配置

注意:1)、ext-config为数组,从0开始。2)、原来的配置文件service1.yaml仍然有效,新增的配置和原来的配置不冲突,即微服务service1不仅读取了service1.yaml,还读取了ext-config-common01.properties、ext-config-common02.properties、ext-config-common03.properties。

可以看到:

♦ 通过 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 在配置变更时,是否支持应用中可动态刷新,感知到最新的配置值。默认是不支持的。

Note : spring.cloud.nacos.config.ext-config[n].data-id 的值必须带文件扩展名,文件扩展名既可支持properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。

通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题(把公共的配置放到某个文件中,然后由各个微服务来引用),又可以支持一个应用有多个配置文件。

测试:

配置ext-confifig-common01.properties:

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

配置ext-confifig-common02.properties

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

将来这个配置文件可以作为各个微服务公共引用的配置文件,比如每个微服务都要连接数据库,连接数据库的配置都一样,我们可以把连接数据库的配置放到这个配置文件中,让各个微服务都扩展引用这个配置文件。

配置ext-confifig-common03.properties

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

编写测试代码:

@RestController
public class Config1Controller {
    @Value("${common.name}")
    private String config1;
    // 注入配置文件上下文
    @Autowired
    private ConfigurableApplicationContext applicationContext;
    @GetMapping(value = "/configs")
    public String getConfigs(){
//        return config1;
        return applicationContext.getEnvironment().getProperty("common.name");
    }
    @GetMapping(value = "/configs2")
    public String getConfigs2(){
        String name = applicationContext.getEnvironment().getProperty("common.name");
        String age =  applicationContext.getEnvironment().getProperty("common.age");
        String address =  applicationContext.getEnvironment().getProperty("common.address");
        String birthday=  applicationContext.getEnvironment().getProperty("common.birthday");
        String fullname =  applicationContext.getEnvironment().getProperty("common.fullname");
        return name+"+"+ age+"+"+address+"+"+ birthday+"+"+ fullname;
    }
}

重启service1工程,浏览器访问:http://localhost:56010/configs2,结果如下:

service1 config 111+12+beijing+2000-01-01+zhangsan

自定义共享 Data Id 配置

为了更加清晰的在多个应用间配置共享的 Data Id ,你可以通过以下的方式来配置:

server:
  port: 56010
spring:
  application:
    name: service1
  cloud:
    nacos:
      config:
        server-addr: 114.115.246.152:8848
        file-extension: yaml
        namespace: 4a65333c-2a01-4802-9a73-59a47e7d94ad
        group: DEV_GROUP
        shared-dataids: ext-config-common01.properties,ext-config-common02.properties
        refreshable-dataids: ext-config-common01.properties
#        ext-config[0]:
#          data-id: ext-config-common01.properties
#        ext-config[1]:
#          data-id: ext-config-common02.properties
#          group: GLOBLE_GROUP
#        ext-config[2]:
#          data-id: ext-config-common03.properties
#          group: REFRESH_GROUP
#          refresh: true  #动态刷新配置

重启服务service1,浏览器访问:http://localhost:56010/configs2,结果如下:

service1 config 111+12+beijing+null+null

为什么后边两个值为null?

共享DataId的配置使用默认的group即DEFAULT_GROUP,ext-confifig-common02.properties不属于DEFAULT_GROUP。

可以看到:

♦ 通过 spring.cloud.nacos.config.shared-dataids 来支持多个共享 Data Id 的配置,多个之间用逗号隔开。

♦ 通过 spring.cloud.nacos.config.refreshable-dataids 来支持哪些共享配置的 Data Id 在配置变化时,应用中是否可动态刷新,感知到最新的配置值,多个 Data Id 之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置的 Data Id 都不支持动态刷新。

Note:通过 spring.cloud.nacos.config.shared-dataids 来支持多个共享配置的 Data Id 时,多个共享配置间的一个优先级的关系我们约定:按照配置出现的先后顺序,即后面的优先级要高于前面。

Note:通过 spring.cloud.nacos.config.shared-dataids 来配置时,Data Id 必须带文件扩展名,文件扩展名既可支持 properties,也可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。

Note: spring.cloud.nacos.config.refreshable-dataids 给出哪些需要支持动态刷新时,Data Id 的值也必须明确给出文件扩展名。

共享DataId的配置相比扩展的 Data Id 配置, 它把group固定为DEFAULT_GROUP,建议使用扩展的 Data Id 配置,因为扩展的 Data Id 配置也可以实现共享DataId配置。

配置的优先级

Spring Cloud Alibaba Nacos Confifig 目前提供了三种配置能力从 Nacos 拉取相关的配置。

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

测试,屏蔽共享dataId,放开ext-confifig,如下:

server:
  port: 56010
spring:
  application:
    name: service1
  cloud:
    nacos:
      config:
        server-addr: 114.115.246.152:8848
        file-extension: yaml
        namespace: 4a65333c-2a01-4802-9a73-59a47e7d94ad
        group: DEV_GROUP
#        shared-dataids: ext-config-common01.properties,ext-config-common02.properties
#        refreshable-dataids: ext-config-common01.properties
        ext-config[0]:
          data-id: ext-config-common01.properties
        ext-config[1]:
          data-id: ext-config-common02.properties
          group: GLOBLE_GROUP
        ext-config[2]:
          data-id: ext-config-common03.properties
          group: REFRESH_GROUP
          refresh: true  #动态刷新配置

重启serivce1服务,浏览器访问:http://localhost:56010/configs2,结果如下:

service1 config 111+12+beijing+2000-01-02+zhangsanfeng

修改ext-confifig-common03.properties:

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

重启serivce1服务,浏览器访问:http://localhost:56010/configs2,结果如下:

service1 config 111+15+beijing+2000-01-02+zhangsanfeng

通过测试发现多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.ext-config[n].data-id其中 n 的值越大,优先级越高。

修改:service1.yaml

Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

重启serivce1服务,浏览器访问:http://localhost:56010/configs2,结果如下:

service1 config 111+25+beijing+2000-01-02+zhangsanfeng

通过测试发现:B和C同时存在,C优先级高。

完全关闭配置

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

3、Nacos集群部署

单机版的nacos如果挂了,nacos服务就无法使用了,所以在实际生产环境中,nacos是要部署成集群的。

集群部署

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

(1)、安装3个以上Nacos

我们可以复制之前已经解压好的nacos文件夹,分别命名为nacos、nacos1、nacos2

(2)、配置集群配置文件

在所有nacos目录的conf目录下,有文件 cluster.conf.example ,将其命名为 cluster.conf ,并将每行配置成ip:port。(请配置3个或3个以上节点)

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

注意:1、IP不能配置为127.0.0.1,得采用本地得IP

2、报错:Address already in use: bind

端口明明没被占用,为什么会出现Address already in use: bind?
我是win10系统,然后设定的端口是8848,8849,8850,注意!!!我设置的是3个连续的端口,其中只有8849出现了Address already in use: bind的问题,8848和8850都没有出现问题。这个可能是windows操作系统的BUG。Linux我不知道有没有,所以我把端口改为8848,8850,8852后就没出现Address already in use: bind问题了。所以集群不要设置同项目连续端口,至少是端口+2。如:高可用子系统:默认端口为8080,那么下一个端口就应该大于或等于8082。

现修改如下:

192.168.10.115:8848
192.168.10.115:8850
192.168.10.115:8852

由于是单机演示,需要更改nacos/的conf目录下application.properties中server.port,防止端口冲突。

如果服务器有多个ip也要指定具体的ip地址,如:nacos.inetutils.ip-address=127.0.0.1

例如:

Original: https://www.cnblogs.com/zwh0910/p/16490699.html
Author: 周文豪
Title: Nacos 配置管理(nacos-server-2.0.3网盘免费下载,nacos连接不上mysql8)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/8234/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部