参考
什么是Nacos
根据Nacos官网介绍Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos和spring-cloud中的组件Eureka区别
- 虽然二者都是发现、管理微服务,但是nacos为我们提供了可配置方式。可以做到配置文件的实时更新发布。
- 安装方式不同,eureka需要我们创建一个项目工程,而nacos只需从官网下载jar直接使用。
接下来我们直接开始使用Nacos,具体下载、安装及说明请看Nacos官网,为了操作演示方便,我将创建maven聚合工程
创建父工程study-parent
引入的依赖:
<?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.study</groupId>
<artifactId>study-parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>study-nacos-config</module>
</modules>
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.0.4.RELEASE</spring-boot.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
<nacos.version>0.2.2.RELEASE</nacos.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${nacos.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
创建子工程study-nacos-config
引入的依赖:
<?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">
<parent>
<artifactId>study-parent</artifactId>
<groupId>com.study</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>study-nacos-config</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建配置文件bootstrap.yml
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
server:
port: 10086
spring:
application:
name: study-nacos-config
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
prefix: ${spring.application.name}
#如果我们在nacos-server创建的配置文件是以.yml结尾,则file-extension: yml
#如果我们在nacos-server创建的配置文件是以.yaml结尾,则file-extension: yaml
file-extension: yml
创建启动类
/**
* @author gq
* @date 2020/8/21 16:48
* @EnableDiscoveryClient 将服务注册在nacos-server上
*/
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigApplication.class,args);
}
}
创建controller
/**
* @author gq
* @date 2020/8/21 16:46
* @RefreshScope 实时更新nacos-server上的配置信息
*/
@RestController
@RefreshScope
public class NacosConfigController {
@Value("${nacos.config}")
private String config;
@RequestMapping("/getValue")
public String getValue() {
return config;
}
}
创建配置文件
在Nacos-Server中新建配置,其中Data ID它的定义规则是: ${prefix}-${spring.profile.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。- spring.profile.active即为当前环境对应的
profile
,可以通过配置项spring.profile.active
来配置。 - file-exetension为配置内容的数据格式,可以通过配置项
spring.cloud.nacos.config.file-extension
来配置。目前只支持properties 和 yaml 类型。
启动nacos-server,在配置管理的列表新建如下配置文件
study-nacos-config.yml
一定是yml或者yaml结尾,如果直接创建study-nacos-config启动的时候会报错。
启动测试
在浏览器输入http://localhost:10086/getValue得到以下结果:
当我们改变study-nacos-config.yml
中的配置内容时,不需要重启服务,直接刷新浏览器发现内容也及时更新,说明该注解@RefreshScope
已生效。