Nacos

Nacos

环境要求:

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;下载 & 配置
  3. Maven 3.2.x+;下载 & 配置

这篇基于

Ubuntu Server 20.04

openjdk 1.8.0_275

Nacos 1.4.1

部署Nacos

下载 & 解压

github地址,下载最新稳定版

# 指定你的安装路径
cd ~/Developement/Alibaba
# 下载
wget https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.tar.gz
# 解压
tar -zxvf nacos-server-1.4.1.tar.gz
# 进入目录
cd nacos/bin
# 启动服务
bash ./startup.sh -m standalone

Linux/Unix/Mac

启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

bash startup.sh -m standalone
  • 访问

    我的Ubuntu是Server版本,没有浏览器,所以在物理机通过ip访问,ip是Linux的ip,假设为 192.168.100.100,则铜鼓浏览器访问http://192.168.100.100:8848/nacos

    用户名:nacos

    密码:nacos

配置Nacos

单机模式支持mysql

  • 1.安装数据库,版本要求:5.6.5+
  • 2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
  • 3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。

将nacos数据存储到mysql中

# 先在mysql中创建数据库 nacos_config
# 打开路径找到官方提供的mysql脚本
cd $NACOS_HOME/conf
# 将nacos-mysql.sql导入数据库
# 修改配置文件
vi $NACOS_HOME/conf/application.properties
# 将以下部分取消备注,或直接添加到配置文件中
spring.datasource.platform=msyql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&auto    Reconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=dev
db.password.0=dev
# 上面的内容在配置文件中被注释掉了,可以直接修改,其中注意要修改数据库名字,它默认是nacos,也可以创建数据库的时候命名nacos,其次修改数据库用户名和密码
  • shutdown nacos,重启可以连接到mysql数据库

配置中心

配置中心的相关信息,必须要配置到bootstrap.yaml/properties配置文件中

概念说明

官网说明

  • 命名空间

    用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

  • 配置分组

    Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

  • 配置集 ID

    Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

基于dataId获取配置

  • 依赖

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
  • 启动类

    @SpringBootApplication
    public class NacosService1Application {
        public static void main(String[] args) {
            SpringApplication.run(NacosService1Application.class, args);
        }
    }
    
  • 创建命名空间和配置

  • bootstrap.yaml

    spring:
      application:
        name: nacos-config
      cloud:
        nacos:
          config:
            server-addr: 192.168.43.130:8848 # 配置中心地址
            file-extension: yaml # 配置文件格式 # dataId的名称是application.name + file-extension = nacos-config.yaml
            namespace: 373887af-7114-4348-927f-8b15e2a4e223 # 指定dev开发环境命名空间的ID
            group: DEFAULT_GROUP # 不指定就是默认组
            refresh-enabled: true # 启用自动刷新,默认开启,即修改了配置中心的参数,能自动获取到最新的值
    
  • 测试类

    @RestController
    @RequestMapping("/config")
    public class NacosConfigController {
        @Resource
        private ConfigurableApplicationContext context;
        @GetMapping("/get")
        public String getConfig() {
            String name = context.getEnvironment().getProperty("user.name");
            String age = context.getEnvironment().getProperty("user.age");
            String out = "user: {name: " + name + ", age: " + age + "} <br/>";
            return out;
        }
    }
    
  • 输出结果

    调用http://localhost:56010/config/get

    user: {name: nacos-config, age: 18}

profile粒度的配置

spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以 dataid 为 ${spring.application.name}.${file-extension:properties} 为前缀的基础配置,还加载了dataid为 ${spring.application.name}-${profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。

  • bootstrap.yaml

    spring:
      application:
        name: nacos-config
      profiles:
        # ${spring.profiles.active} 当通过配置文件来指定时必须放在 bootstrap.properties 文件中
        active: develop
    
  • 配置中心

  • 测试代码

    @RestController
    @RequestMapping("/config")
    public class NacosConfigController {
        @Resource
        private ConfigurableApplicationContext context;
    
        @GetMapping("/get")
        public String getConfig() {
            String name = context.getEnvironment().getProperty("user.name");
            String age = context.getEnvironment().getProperty("user.age");
            // 获取当前部署的环境
            String env = context.getEnvironment().getProperty("current.env");
            String out = "in " + env + " user: {name: " + name + ", age: " + age + "} <br/>";
            return out;
        }
    }
    
  • 输出结果

    in develop-dev user: {name: nacos-config, age: 18}

自定义拓展DataId

  • 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的配置方式来支持多个 Data Id 的配置。
  • 通过 spring.cloud.nacos.config.extension-configs[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
  • 通过 spring.cloud.nacos.config.extension-configs[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。
  • 多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,优先级越高。
  • 配置文件

  • bootstrap.yaml

    spring:
      application:
        name: nacos-config
      profiles:
        # ${spring.profiles.active} 当通过配置文件来指定时必须放在 bootstrap.properties 文件中
        active: develop # 指定develop环境 dataId会以${spring.application.name}-${profile}.${file-extension:properties}形式组成
      cloud:
        nacos:
          config:
            server-addr: 192.168.43.130:8848 # 配置中心地址
            file-extension: yaml # 配置文件格式 # dataId的名称是application.name + file-extension = service1.yaml
            namespace: 373887af-7114-4348-927f-8b15e2a4e223 # 开发环境
            #          group: DEFAULT_GROUP # 默认组
            #          refresh-enabled: true # 启用自动刷新,默认开启
            # 拓展DataId配置
            ## 1 默认组 DEFAULT_GROUP 内,不支持配置的动态刷新
            extension-configs[0]:
              data-id: ext-config-common01.yaml
            ## 2 不在默认组内,不支持动态刷新
            extension-configs[1]:
              data-id: ext-config-common02.yaml
              group: GLOBALE_GROUP
            ## 3 不在默认组内,支持动态刷新
            extension-configs[2]:
              data-id: ext-config-common03.yaml
              group: REFRESH_GROUP
              refresh: true
    
  • 测试类

    @RestController
    @RequestMapping("/config")
    public class NacosConfigController {
        @Resource
        private ConfigurableApplicationContext context;
    
        @GetMapping("/get")
        public String getConfig() {
            String name = context.getEnvironment().getProperty("user.name");
            String age = context.getEnvironment().getProperty("user.age");
            // 获取当前部署的环境
            String env = context.getEnvironment().getProperty("current.env");
            // 获取拓展的dataId
            String common01 = context.getEnvironment().getProperty("common01.value");
            String common02 = context.getEnvironment().getProperty("common02.value");
            String common03 = context.getEnvironment().getProperty("common03.value");
            String out = "in " + env + " user: {name: " + name + ", age: " + age + "} <br/>"
                    + "common01: " + common01 + "<br/>common02: " + common02 + "<br/>common03: " + common03;
            return out;
        }
    }
    
  • 输出结果

    in develop-dev user: {name: nacos-config, age: 18}
    common01: common01
    common02: common02
    common03: common03
    

————————————————————————————————

posted @ 2021-03-16 10:47  CS5421  阅读(239)  评论(0)    收藏  举报