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 蜕化为

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值