Nacos环境准备
1.什么是Nacos

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

2.下载安装Nacos

Nacos官方教程

Nacos下载地址

3.版本选择

官方版本对应说明文档:选择好对应的依赖版本,避免引起jar包冲突

使用Nacos
1.Maven依赖导入
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
2.Nacos服务注册和发现

[官方例子]

第一步:首先,修改 pom.xml 文件,引入 Nacos Discovery Starter。

<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 </dependency>

第二步:配置application.yml(application.properties) 端口/ 服务名/Nacos Server 地址

server:
  port: 9003  #端口
spring:
  application:
    name: nacos-server  #服务名
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848  #Nacos Server 地址

第三步:开启服务发现,启动类上添加@EnableDiscoveryClient

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

启动nacos server服务后再启动服务,然后就可以再服务列表看到注册的服务

3.Nacos作为配置中心

[官方例子]

tip:完成注册步骤后

第一步:首先,修改 pom.xml 文件,引入 Nacos Config Starter。

<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 </dependency>

第二步:新建配置bootstrap.yml(bootstrap.properties) 路径: /src/main/resources/bootstrap.yml

spring:
  application:
    name: nacos-server  #服务名
  cloud:
    nacos:
      config:
        file-extension: yaml #文件类型,默认是properties
        server-addr: 127.0.0.1:8848  #Nacos Server 地址
        namespace: d1b0c3da-f1bc-44fc-9ee2-2d6c134ecda0 #命名空间 默认是public 不需要不配置
        group: dev  #分组 默认是DEFAULT_GROUP 不需要不配置

nacos客户端创建namespace nacos创建服务_微服务架构

第三步:使用配置中心的配置

tip:在对应的namespace创建配置,默认会加载 服务名.properties,配置file-extension: yaml后会加载 服务名.yml

  • 新建配置

nacos客户端创建namespace nacos创建服务_加载_02

看配置选择YAML或者Properties都可以,只是书写方式不一样,配置内容发布

输入内容:Data ID(配置集Id):nacos-server,Group(组):dev,配置格式:yaml

nacos客户端创建namespace nacos创建服务_java_03


配置内容:

test:
  user:
    age: 22
    name: james
  • 测试使用代码,并添加 @RefreshScope 打开动态刷新功能
@RefreshScope
@RestController
@RequestMapping("test")
public class SampleController {

    @Value("${test.user.name}")
    String userName;

    @Value("${test.user.age}")
    int age;

    /**
     * 测试配置中心
     * @return
     */
    @RequestMapping("/config")
    public Map<String,Object> config(){
        Map<String,Object> map = new HashMap<>();
        map.put("userName",userName);
        map.put("age",age);
        return map;
    }
}

测试结果:成功

nacos客户端创建namespace nacos创建服务_java_04

配置的加载顺序:会优先加载nacos配置中心的配置,如果没有则加载本地的配置

4.Nacos的多配置加载
extension-configs

nacos界面操作:

  • data-id名称,需要带上后缀名,默认的不需要带后缀
  • data-id的文件后缀必须和配置格式一样

tips:

  • data-id不支持动态刷新,需要配置refresh=true
  • [x],数值越大,优先级越高

配置样例:

spring:
  application:
    name: nacos-server
  cloud:
    nacos:
      config:
        file-extension: yaml #文件类型,默认是properties
        server-addr: 127.0.0.1:8848  #Nacos Server 地址
        namespace: d1b0c3da-f1bc-44fc-9ee2-2d6c134ecda0  #命名空间 默认是public 不需要不配置
        group: dev #分组 默认是DEFAULT_GROUP 不需要不配置
        extension-configs[0]: 
          data-id: datasource.yml #配置集名称 文件名
          group: dev #分组
          refresh: true  #动态刷新
        extension-configs[1]:
          data-id: mybatis.yml
          group: dev
          refresh: true
        extension-configs[2]:
          data-id: other.yml
          group: dev
          refresh: true
shared-configs

配置样例:

spring:
  cloud:
    nacos:
      config:
        shared-configs[0]:
          data-id: datasource.yml
          group: dev
          refresh: true
        shared-configs[1]:
          data-id: mybatis.yml
          group: dev
          refresh: true
        shared-configs[2]:
          data-id: other.yml
          group: dev
          refresh: true
ext-config[已废弃]

配置样例:

spring:
  cloud:
    nacos:
      config:
        ext-config[0]:
          data-id: datasource.yml
          group: dev
          refresh: true
        ext-config[1]:
          data-id: mybatis.yml
          group: dev
          refresh: true
        ext-config[2]:
          data-id: other.yml
          group: dev
          refresh: true
优先级

bootstrap.yml>application.yml

默认加载> extension-configs>shared-configs

bootstrap.yml :用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootstrap.yml 被加载,则内容不会被覆盖。

application.yml: 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

优先级

bootstrap.yml>application.yml

默认加载> extension-configs>shared-configs

bootstrap.yml :用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootstrap.yml 被加载,则内容不会被覆盖。

application.yml: 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。