Nacos的配置管理
放个妹子能增加访问量?
动态配置服务
动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
前提:
需要搭建一个nacos单机或者集群,按照链接文档搭建
创建配置
这里先创建配置,好在应用集成的时候说明参数释义
- 创建命名空间,在命令空间菜单下,点击新建,空间名为nacos-config-example
- 点击创建配置,按照以下图示创建,并点击发布
这里有个dataId
,是应用获取nacos配置文件的唯一标识,匹配规则在应用集成
应用集成
创建nacos-config-example模块
- 引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
spring-boot版本号为2.4.2,nacos-config版本号为2021.1,bootstrap版本号为3.0.3,在父pom中定义,此处不展示
- 创建
ConfigApplication
,此处将controller
也写在一块
package cn.axj.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class ConfigApplication {
@Value("${useLocalCache}")
private boolean useLocalCache;
/**
* 测试连接,获取配置信息
*/
@GetMapping("/config")
public Object config(){
return useLocalCache;
}
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class,args);
}
}
- 在resources下创建bootstrap.yml文件,并配置nacos配置中心的相关信息
spring:
application:
name: nacos-config-example
cloud:
nacos:
config:
group: nacos-config-example-group
namespace: nacos-config-example
server-addr: 192.168.56.102:8848,192.168.56.104:8848,192.168.56.105:8848
file-extension: yml
prefix: ${spring.application.name}
参数释义
:
参数名称 | 参数释义 | 参数作用 |
---|---|---|
server-addr | nacos的ip地址,集群模式下需要配置所有的节点信息 | 配置nacos机器地址 |
namespace | 对应nacos的命名空间, | 配置的隔离性和安全性 |
group | 在配置的时候有个组信息,默认是DEFAULT_GROUP | 配置的隔离性 |
file-extension | 配置文件结束标记,目前只支持yml或者properties | 获取nacos配置文件的组成部分 |
prefix | 配置的前缀,默认是${spring.application.name} | 可以自定义,可不配置,使用默认 |
tips
: 这里可以看到nacos没有配置username
,password
可以直接访问到nacos,并获取配置信息。这是因为nacos默认的弱鉴权机制,官方强烈不推荐nacos暴露到公网环境中,如果要暴露到公网环境中,需要自己实现nacos的鉴权插件
,实现自己的鉴权逻辑,不然会有巨大的安全风险。
关于应用会从nacos配置中心获取哪一份配置的说明
说明:之所以需要配置 spring.application.name
,是因为它是构成 Nacos 配置管理 dataId
字段的一部分。
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
- 启动ConfigApplication,访问localhost:8080/config,看到返回最开始配置的
false
在线编辑&动态刷新
选中nacos-config-example.yml,点击编辑,将useLocalCache
配置改成true,并点击发布
访问localhost:8080/config,看到返回还是最开始配置的false
如何实现动态刷新
- 在controller类上面加上SpringCloud的原生注解
@RefreshScope
,需要动态刷新的controller都需要加上 - 在ConfigApplication上面加上@RefreshScope注解
@RestController
@SpringBootApplication
@RefreshScope
public class ConfigApplication {
...
}
-
重启应用,由于此时,useLocalCache的值已经变成true,所以此时访问localhost:8080/config,会返回true
-
将useLocalCache的值改成false,并点击发布,再次访问localhost:8080/config,观察返回值是否同步更新
一键回滚
当动态更新配置的时候,由于错误配置等各种原因,需要将配置还原,nacos提供了历史版本功能。可以直接回滚到想要的版本中去。
- 点击历史版本,或者菜单栏点击历史版本模块
- 历史版本界面
- 点击
详情
可以看到当前版本的配置内容 - 点击对比可以看到当前版本对应上一个版本的变动内容
- 点击回滚后,点击
回滚配置
,可以将配置更新到当前版本
监听查询
监听查询有配置和ip的维度。
通过搜索对应的配置信息,可以查询到有哪个ip的机器获取过该配置信息。
如图所示,nacos-config-example被192.168.56.1获取过。
tips
,由于我的nacos(192.168.56.102-105)在虚拟机环境下,所以宿主机ip为192.168.56.1