Nacos 初探

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

以下内容都是基于spring-boot + nacos

依赖管理

项目:nacos-spring-boot-example

1
2
3
4
5
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.1</version>
</dependency>

application.yml

1
2
3
4
nacos:
config:
server-addr: 192.168.56.101:8848
# namespace: '0278390f-21e8-40ae-b46d-fac0ebb7af97'

namespace是命名空间 ID,不能配置命名空间名称。如果不配置namespace,默认使用public

在 Nacos 控制台新建配置

Data ID:szim.properties

Group:DEFAULT_GROUP

配置内容

1
2
id=1
name=forever杨

App.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import com.alibaba.nacos.api.config.annotation.NacosConfigListener;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.alibaba.nacos.spring.context.annotation.config.EnableNacosConfig;
import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import lombok.extern.slf4j.Slf4j;

@SpringBootApplication
@EnableNacosConfig
@NacosPropertySource(dataId = App.DATA_ID)
@Slf4j
public class App {
static final String DATA_ID = "szim.properties";

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

@NacosConfigListener(
dataId = App.DATA_ID,
timeout = 500
)
public void onChange(String newContent) throws Exception {
log.info("onChange: {}", newContent);
}

@Bean
@Order(Ordered.LOWEST_PRECEDENCE - 1)
public CommandLineRunner secondCommandLineRunner() {
return new SecondCommandLineRunner();
}

public static class SecondCommandLineRunner implements CommandLineRunner {
@NacosValue("${id:unknown}")
private String id;

@NacosValue("${name:unknown}")
private String name;

@Override
public void run(String... args) throws Exception {
log.info("id: {}, name: {}", id, name);
}
}
}

支持的配置方式

yaml文件

支持的格式

1
2
spring.redis.host: 192.168.199.101
spring.redis.port: 6379

不支持的格式

1
2
3
4
spring:
redis:
host: 192.168.199.101
port: 6379

据说后续版本会支持这种格式

properties文件

1
2
spring.redis.host = 192.168.199.101
spring.redis.port = 6379

读取配置

1
2
3
4
5
@Value("${spring.redis.port}")
private String host;

@NacosValue(value = "${spring.redis.port}", autoRefreshed = true)
private String port;

Spring @Value注解和 Nacos @NacosValue 注解

注解 是否支持动态更新 补充
@Value
@NacosValue 前提需配置autoRefreshed=true

1.3.0+ 版本使用分布式存储启动命令:sh bin/startup.sh -p embedded

  • 本文作者: forever杨
  • 本文链接: https://blog.yl-online.top/posts/c706fd60.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。如果文章内容对你有用,请记录到你的笔记中。本博客站点随时会停止服务,请不要收藏、转载!