Spring Cloud Nacos配置管理方案

 更新时间:2025年01月24日 10:38:26   作者:happycao123  
Nacos是SpringCloud中用于服务注册与发现和配置管理的组件,提供多种健康检查机制和历史版本管理,Nacos支持单机、集群和多集群模式,通过OpenAPI和多种语言客户端进行接入,感兴趣的朋友一起看看吧

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

请求参数

名称类型是否必须描述
tenantstring租户信息,对应 Nacos 的命名空间ID字段。
dataIdstring配置 ID。
groupstring配置分组。

通过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

请求参数

名称类型是否必须描述
tenantstring租户信息,对应 Nacos 的命名空间ID字段
dataIdstring配置 ID
groupstring配置分组
contentstring配置内容
typeString配置类型

通过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}.${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 作为配置中心,实现了配置的集中管理,当配置更新时,不需要重启应用立即生效,同时配置的修改具有版本管理功能,便于
审计和回滚等操作。此外对于一些敏感信息放到配置中心,通过权限控制增加安全性。

到此这篇关于Spring Cloud Nacos配置管理的文章就介绍到这了,更多相关Spring Cloud Nacos配置管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中filter用法完整代码示例

    Java中filter用法完整代码示例

    这篇文章主要介绍了Java中filter用法完整代码示例,分享了浏览器不缓存页面的过滤器,检测用户是否登陆的过滤器等相关实例,小编觉得还是挺不错的,这里分享给大家,需要的朋友可以参考下
    2018-01-01
  • 详解Java实践之建造者模式

    详解Java实践之建造者模式

    建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。它隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象
    2021-06-06
  • spring boot 使用@Async实现异步调用方法

    spring boot 使用@Async实现异步调用方法

    本篇文章主要介绍了spring boot 使用@Async实现异步调用方法,具有一定的参考价值,有兴趣的可以了解一下。
    2017-04-04
  • Java中private关键字详细用法实例以及解释

    Java中private关键字详细用法实例以及解释

    这篇文章主要给大家介绍了关于Java中private关键字详细用法实例以及解释的相关资料,在Java中private是一种访问修饰符,它可以用来控制类成员的访问权限,文中将用法介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • String与Blob互转和file文件与Blob互转方式

    String与Blob互转和file文件与Blob互转方式

    这篇文章主要介绍了String与Blob互转和file文件与Blob互转方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Java日常练习题,每天进步一点点(2)

    Java日常练习题,每天进步一点点(2)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Spring boot如何基于拦截器实现访问权限限制

    Spring boot如何基于拦截器实现访问权限限制

    这篇文章主要介绍了Spring boot如何基于拦截器实现访问权限限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Java实例精炼掌握语法

    Java实例精炼掌握语法

    本章节我们将为大家介绍 Java 实现几大基础问题,通过实例学习我们可以更快的掌握 Java 的应用,感兴趣的朋友来看看吧
    2022-04-04
  • Spring获取当前类在容器中的beanname实现思路

    Spring获取当前类在容器中的beanname实现思路

    这篇文章主要介绍了Spring获取当前类在容器中的beanname,实现思路只需继承BeanNameAware接口,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • maven下mybatis-plus和pagehelp冲突问题的解决方法

    maven下mybatis-plus和pagehelp冲突问题的解决方法

    这篇文章主要介绍了maven下mybatis-plus和pagehelp冲突的解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08

最新评论