Spring Cloud Nacos配置管理

Spring Cloud Nacos

Nacos全称Dynamic Naming and Configuration Service ,它可以用于RPC框架中服务的注册与发现 ,也可以作为配置中心管理应用的配置.

服务注册与发现

使用过RPC框架同学对服务注册与发现 并不陌生,比如Dubbo默认使用Zookeeper作为注册中心,完成服务的注册与发现,而Nacos 同样可以充当注册中心的角色。

Nacos 提供了多种健康检查机制,确保请求总是被健康的服务器处理。

配置管理

Nacos 还可以作为配置中心,在运行时动态修改 配置,而无需重启应用

对于配置的修改进行历史版本管理,便于回滚和审计。

同时Nacos对多环境支持,即不同的环境(如开发、测试、生产)有不同的配置

Nacos 优势

Nacos具有数据模型简单 ,提供了简单便捷的控制台 界面,支持多种语言 如 Java/Golang/Python等优势,使得在Spring Cloud 微服务组件中占有重要的一席之地

Nacos 安装与使用

jdk 安装 与配置

Nacos 依赖JDK环境, 建议使用JDK 1.8 ,安装完成配置好环境变量。

Nocas 配置中心使用

官网下载2.x版本,本文下载的是nacos-server-2.4.3.tar.gz

Nacos 部署方式

  • 单机模式
  • 集群模式
  • 多集群模式

解压后,进入nacos/bin 目录 执行 , -m standalone 参数指定以单机模式部署。启动成功后输入 http://ip:8848/nacos 进入控制台,可以在控制台进行配置的增删查改

复制代码
tar -zxvf nacos-server-2.4.3.tar.gz
./startup.sh -m standalone

Nacos 接入

Nacos 支持多种方式对接

  • Open API
  • Java SDK
  • Nacos Spring
  • Nacos Spring Boot
  • Nacos Spring Cloud

Open API 方式

可以通过CURL命令发送指定请求,实现配置的增删查改

获取配置

请求URL /nacos/v1/cs/configs

请求参数

名称

类型

是否必须

描述

tenant

string

租户信息,对应 Nacos 的命名空间ID字段。

dataId

string

配置 ID。

group

string

配置分组。

通过CURL 查询配置

复制代码
curl -X GET 'http://127.0.0.1:8848/nacos/v2/cs/config?dataId=codetonight.ak&group=nacos-demo&namespaceId=public'

返回

复制代码
{"code":0,"message":"success","data":"akserert123"}
发布配置

请求 URL /nacos/v1/cs/configs

请求参数

名称

类型

是否必须

描述

tenant

string

租户信息,对应 Nacos 的命名空间ID字段

dataId

string

配置 ID

group

string

配置分组

content

string

配置内容

type

String

配置类型

通过CURL 发布配置

复制代码
curl -d 'dataId=nacos.example' 

-d 'group=DEFAULT_GROUP'

-d 'namespaceId=public'

-d 'content=contentTest'

-X POST 'http://127.0.0.1:8848/nacos/v2/cs/config'

Java SDK

如果你的项目不是基于Spring Boot ,你也可以使用Nacos-client ,

当然这种方式使用起来就不那么优雅。

如果你愿意,也可以按照Open API格式构造Http 请求,与Nacos交互,这也是Nacos 很容易支持其他语言的原因,因为它支持Open API,

其他语言只要构造对应的Http请求即可。

Nacos-client 需要引入Pom依赖,Java代码也很简单,这种使用方式比较少。

复制代码
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>${nacos.version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.36</version> <!-- 请替换为实际版本号 -->
        </dependency>


  String serverAddr = "http://localhost:8848";
        String dataId = "nacos.example";
        String group = "DEFAULT_GROUP";
        Properties properties = new Properties();
        properties.put("serverAddr", serverAddr);
        ConfigService configService = NacosFactory.createConfigService(properties);
        String content = configService.getConfig(dataId, group, 5000);
        System.out.println(content);
        configService.addListener(dataId, group, new Listener() {
            @Override
            public void receiveConfigInfo(String configInfo) {
                System.out.println("recieve1:" + configInfo);
            }
            @Override
            public Executor getExecutor() {
                return null;
            }
        });


        Thread.sleep(1000*3600);

Nacos Spring Cloud

Nacos Spring,Nacos Spring Boot 使用方式可以自行查看官方文档,本文重点介绍Nacos Spring Cloud 接入方式,

主要内容包含

  • 属性自动刷新
  • 多环境支持

首先提个问题为什么需要配置中心?

传统的配置放到properties文件或者yaml文件中,随着代码一起打包,当需要修改配置时,应用需要重启才生效。

此外配置中包含一些敏感信息,如果数据库用户名和密码,这些配置放到 properties文件或者yaml文件存在安全隐患。 因此有了配置中心。

配置中心配置优先级高于配置文件中配置

DataId

Spring Cloud 中 dataId 格式

复制代码
${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 如果不配置则值为 spring.application.name

  • spring.profiles.active 即为当前环境对应的 profile, 如果spring.profiles.active为空

    对应dataId 蜕化为

    prefix.{prefix}.prefix.{file-extension}

  • file-exetension 目前只支持 propertiesyaml 类型

配置示例一

以下是Spring Cloud 一个简单配置,我们没有配置多环境那么,对应的dataId

nacos-demo.properties

复制代码
# bootstrap.properties

spring.application.name=nacos-demo
spring.cloud.nacos.config.server-addr=http://127.0.0.1:8848
spring.cloud.nacos.config.namespace=public
spring.cloud.nacos.config.group=nacos-demo

spring.cloud.nacos.config.file-extension=properties
多环境配置

对应的dataId nacos-demo-dev.properties

复制代码
# bootstrap.properties

spring.application.name=nacos-demo
spring.cloud.nacos.config.server-addr=http://127.0.0.1:8848
spring.cloud.nacos.config.namespace=public
spring.cloud.nacos.config.group=nacos-demo

spring.cloud.nacos.config.file-extension=properties


#application.properties
spring.profiles.active=dev


#application-dev.properties
codetonight.user=codetonight

java 代码使用

@RefreshScope 加在指定类上会自动刷新属性。

本例中 codetonight.user没有在配置中心配置,因此取配置文件中值。

codetonight.ak、codetonight.sk属于敏感信息,我们将其放到配置中心,达到安全管控目的。

复制代码
@RestController
@RefreshScope
public class NacosTestController {


    @Value(value = "${codetonight.ak}")
    private String ak;

    @Value(value = "${codetonight.sk}")
    private String token;


    @Value(value = "${codetonight.user}")
    private String user;

    @GetMapping("/getInfo")
    public String getInfo(){
        return ak + "=>" + token + "=>" + user;
    }

}

在Nacos控制台修改对应配置,查询日志,应用监听到变更,再次请求配置已经生效

总结

Nacos 作为配置中心,实现了配置的集中管理 ,当配置更新时,不需要重启应用立即生效,同时配置的修改具有版本管理 功能,便于

审计和回滚等操作。此外对于一些敏感信息放到配置中心,通过权限控制增加安全性。

相关推荐
星辰徐哥5 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
星辰徐哥5 小时前
Spring Boot 数据导入导出与报表生成
spring boot·后端·ui
明夜之约5 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee5 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐5 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs5 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
毕设源码_郑学姐5 小时前
计算机毕业设计springboot网络相册设计与实现 基于Spring Boot框架的在线相册管理系统开发与应用 Spring Boot驱动的网络影集设计与实践
spring boot·后端·课程设计
辣机小司5 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
码农阿豪5 小时前
从零到一:Spring Boot快速接入金仓数据库实战
数据库·spring boot·后端
追逐时光者5 小时前
一个基于 .NET 与 Avalonia 构建、面向 TrinityCore 的开源 WoW 数据库编辑器
后端·.net