0%

SpringCloud下基于Nacos的配置中心实践

Nacos作为Alibaba开源的一款分布式中间件,其提供了丰富的能力。这里就其作为配置中心方面进行实践

abstract.jpeg

配置Nacos服务

这里利用Docker搭建一个Nacos服务节点

1
2
3
docker run -d -p 8848:8848 \
--env MODE=standalone \
--name Nacos-Service nacos/nacos-server:1.4.2

基本实践

直接向服务引入Nacos作为配置中心所需的spring-cloud-starter-alibaba-nacos-config依赖,如下所示

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
<dependencyManagement>
<dependencies>

<!--Spring Boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>

<!--Spring Cloud Alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>

</dependencies>
</dependencyManagement>

<dependencies>

<!--Spring Cloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

</dependencies>

在bootstrap.yml配置文件中,添加配置中心的地址信息

1
2
3
4
5
6
7
8
spring:
cloud:
nacos:
config:
# 配置中心 Nacos 地址信息
server-addr: localhost:8848
# 配置文件的格式类型
file-extension: yaml

而在application.yml配置文件中,定义应用级相关信息。其中,这里开启Actutor的所有端点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server:
port: 87

spring:
application:
name: order
profiles:
active: dev

# Actuator配置: 开启所有端点
management:
endpoints:
web:
exposure:
include: "*"
base-path: /actuator

这里直接提供一个Controller以便于测试。其中添加@RefreshScope注解以实现配置的动态更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RefreshScope
@RestController
@RequestMapping("order")
public class OrderController {

@Value("${mysql.url}")
private String dbUrl;

@GetMapping("/getDbUrl")
public String getDbUrl() {
return dbUrl;
}

}

这里对Nacos在配置中心应用场景下的配置文件名称规则,做如下介绍。其使用的配置文件名称规则如下所示,即对于本例而言,其所使用的配置文件名为 order-dev.yaml

1
${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

特别地,如果未配置spring.profile.active项,则配置文件的规则为

1
${spring.application.name}.${spring.cloud.nacos.config.file-extension}

现在进入Nacos的Web管理页面 http://localhost:8848/nacos ,其中缺省用户名、密码均为nacos。建立相关配置文件,如下所示。其中Data ID即为配置文件的名称

figure 1.jpeg

现在,启动该服务以进行测试,如下所示符合预期

figure 2.jpg

现在我们通过Nacos的Web页面修改配置内容,可以看到服务会自动获取最新配置,而无需重启服务。如下所示符合预期

figure 3.jpeg

配置的分级管理

基于分组Group

事实上,Nacos还可以通过Group分组实现配置文件的分级管理。如下所示,在bootstrap.yml配置文件指定group为TEST_GROUP

1
2
3
4
5
spring:
cloud:
nacos:
config:
group: TEST_GROUP

然后在Nacos的Web页面添加一个新的配置文件,其Data ID依然是order-dev.yaml,只不过该配置文件所属分组为TEST_GROUP

figure 4.jpeg

现在重启服务,验证下其所获取的配置。可以看到其根据Group、Data ID共同定位到相应的配置文件。其中,spring.cloud.nacos.config.group配置项默认为DEFAULT_GROUP

figure 5.jpg

基于命名空间namespace

在Group之上其还可以有一级目录——即命名空间namespace。类似地,首先在Nacos的Web页面建立一个新的命名空间namespace-2,如下所示。其中命名空间ID为 a93c8495-7840-40ac-b72f-47e5fc93eff8

figure 6.jpeg

然后在namespace-2命名空间下,建立一个Group为TEST_GROUP,Data ID为order-dev.yaml的配置文件,其内容如下所示

figure 7.jpeg

在bootstrap.yml配置文件通过spring.cloud.nacos.config.namespace设置命名空间ID

1
2
3
4
5
6
7
spring:
cloud:
nacos:
config:
group: TEST_GROUP
# 命名空间ID
namespace: a93c8495-7840-40ac-b72f-47e5fc93eff8

现在重启服务,验证下其所获取的配置。可以看到其根据Namespace、Group、Data ID共同定位到相应的配置文件。其中,spring.cloud.nacos.config.namespace配置项默认为public

figure 8.jpg

请我喝杯咖啡捏~

欢迎关注我的微信公众号:青灯抽丝