一、概述
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。使用Nacos分布式配置中心可以对项目使用到的配置文件做统一管理,并且支持不同环境动态切换,动态刷新,界面操作管理。
二、使用步骤
- 添加依赖;
- 在Nacos-UI界面发布配置;
- 修改项目内部配置文件,用于读取第二步发布的配置。
三、案例演示
本文案例代码是基于上一篇文章《三、Spring Cloud Alibab-Feign-服务调用》进行增加的。
在上述文章的服务消费者(nacos-consumer)
模块中,配置信息都是写在application.yml配置文件中,一旦需要修改就得关闭服务,修改之后重新启动才会生效。此案例中将配置发布到Nacos上,并实现动态刷新配置效果。
3.1、Maven依赖(POM)
在服务消费者(nacos-consumer)
模块中添加Nacos-Config依赖:
<!-- Nacos-Config Start -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- Nacos-Config Start -->
3.2、使用Nacos UI发布配置
通过浏览器访问Nacos Server:http://192.168.145.129:8848/nacos;点击配置列表即可新增并发布配置。 将工程application.yml
配置文件中的配置信息复制到配置内容中,去除注释。
注:Data ID 的默认扩展名为 .properties
,希望使用 YAML 配置,此处必须指明是 .yaml
,也不是.yml
。
server:
port: 8071
spring:
application:
name: service-consumer
cloud:
nacos:
discovery:
server-addr: 192.168.145.129:8848
feign:
hystrix:
enabled: true
3.3、修改项目内部配置(bootstrap.properties
)
删除工程原有的application.yml
配置文件,并新建一个名为bootstrap.properties
的配置文件,并在此文件中配置加载Nacos Config发布的配置信息:
# 读取Nacos Config中配置名
spring.application.name=service-consumer-config
# Nacos Config服务地址
spring.cloud.nacos.config.server-addr=192.168.145.129:8848
# 配置后缀,与配置名结合即为Data ID
spring.cloud.nacos.config.file-extension=yaml
Spring Boot项目配置文件优先加载顺序:
bootstrap.properties > bootstrap.yml > application.properties > application.yml
3.4、前端控制器(Controller)
为测试能获取到Nacos Config上发布的配置信息,并且支持动态刷新效果,新建一个前端控制器打印服务端口:
在前端控制器加上@RefreshScope
注解, 打开动态刷新功能;使用@Value
注解注入配置数据。
package com.zhoumo.nacos.consumer.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RefreshScope
@RestController
@RequestMapping("/consumer")
public class NacosConfigController {
@Value("${server.port}")
private String port;
@RequestMapping("/config")
public String ConfigTest(){
return "This service port is: " + port;
}
}
3.5、启动项目验证是否获取配置
3.6、修改配置验证是否动态刷新
1、进入Nacos UI界面,选择并编辑配置;
2、修改服务端口号,并选择发布;
3、查看工程控制台日志,可看到端口已动态刷新;
4、浏览器访问前端控制器,再次验证是否成功刷新。
注:服务端口没变,获取端口配置变了。证明通过Nacos Config修改配置数据并不需要重启服务,而是通过动态刷新获得。
提示: 你可以使用
spring.cloud.nacos.config.refresh.enabled=false
来关闭动态刷新
四、总结
本文介绍了Nacos分布式配置中心的含义以及作用,并通过详细案例讲解了在Spring Cloud项目中如何使用Nacos-分布式配置中心;如何通过Nacos Config实现配置数据信息动态刷新等功能。