前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Java学习笔记-微服务(7)-注册配置中心Nacos

Java学习笔记-微服务(7)-注册配置中心Nacos

原创
作者头像
咸鱼程序员
修改2025-03-09 10:14:43
修改2025-03-09 10:14:43
410
举报

Nacos

Nacos 的含义是 Dynamic Naming and Configuration Service。

官方介绍:Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 就是注册中心 + 配置中心的组合,例如 Nacos = Eureka + Config + Bus 或 Nacos = Spring Cloud Consul。

Nacos 可以替代 Eureka\Consul 做微服务注册中心,也可以替代 Config+Bus/Consul 做服务配置中心和满足动态刷新广播通知。

可以通过源码或发行包两种方式来获取 Nacos

下载完成后,点击 bin 目录下的 startup.cmd 启动或 bin 目录 cmd 启动命令窗口输入 startup.cmd -m standalone 启动(个人测试单机模式)。

启动后访问 http://127.0.0.1:8848/nacos 即可。若存在登录界面,则账户密码均为 nacos。

退出 Nacos 的方式是在命令窗口使用 ctrl + C。

配置

在使用 Nacos 的模块中添加依赖(在父工程 pom 中添加版本)

代码语言:xml
复制
    <!--nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>    

替换 yml 文件的 spring 中与 consul 相关的内容

代码语言:yml
复制
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

修改完毕后启动项目,即可在 Nacos 中看到该模块。同时 Nacos 支持负载均衡,测试过程和前文几乎相同。

Nacos Config 服务配置中心

前文提到的 Consul 8500 服务配置动态变更可以被 Nacos 替代。

通过 Nacos 和 Nacos Config 实现中心化全局配置的动态变更。

前文模块使用次数多,内容过多,重新创建一个干净的模块做演示。

创建一个服务方模块,引入依赖

代码语言:xml
复制
    <dependencies>
        <!--cloud-bootstrap-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <!--nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

application.yml 指明端口号及相关配置,bootstrap.yml 如下

代码语言:yml
复制
# nacos
spring:
  application:
    name: nacos-config-client
  profiles:
    active: dev # 表示开发环境 prod表示生产环境 test 表示测试环境

  cloud:
    nacos:
      discovery:
        server-addr: http://127.0.0.1:8848 # 配置中心地址

      config:
        file-extension: yaml
        server-addr: http://127.0.0.1:8848 # 配置中心地址

修改该模块的启动类后(按前文的方式),新建业务代码(内容来源为 Consul 演示时的示例)

代码语言:java
复制
@RestController
@RefreshScope // 注解含义:使当前类下的配置支持Nacos的动态刷新功能
public class NacosConfigClientController {

    @Value("${config.info}")
    private String info;

    @PostMapping("config/info")
    public String getConfigInfo() {
        return info;
    }
}

在配置 Nacos 之前,我们需要了解 Nacos 是如何配置参数的。Nacos 在可视化界面中的配置管理-

配置列表选项中,存在一个名为 DataId 的配置项,该配置项 Nacos 官方有明确的介绍。

nacos配置中心dataid 命名规则建议 nacos-opensource | Nacos

在官方的建议中:

${应用名} 表示配置中 spring-application-name 的服务名;

${环境标识} 表示配置中 spring-profiles-active 的环境标识名;

${模块名} 表示当某个模块需要特别标记时加入命名;

后缀表示 spring-cloud-discovery-config-file-extension 的配置格式。

由上述的四个名称 + 横线(减号)组成一个完整的 DataId 命名。

不建议个人随意修改命名,不建议个人随意修改命名,不建议个人随意修改命名。

我们点击配置管理-配置列表-创建配置后,填入相关内容

Data ID 按照 Nacos 的命名规范填写;

Group 默认;

配置格式 YAML;

配置内容按照测试类的层级进行填写

代码语言:yml
复制
config:
    info: hello nacos

配置完成后,配置完成后启动该模块,访问 /config/info 路径,可以获取返回信息 'hello nacos'。

当然,我们在业务类添加了 @RefreshScope 注解后,可以动态的修改 Nacos 的配置内容,再次访问可以获取不同的返回信息。

Nacos 的配置会记录历史版本,默认保留 30 天,也包含了一件回滚功能,速通笔记仅作了解此处不深入介绍。

Nacos 数据模型

在多环境、多项目管理的场景下,如何保证服务能够正确读取到相应环境的配置呢?Nacos 的数据模型由三元组唯一确定(namespace、Group、DataID)。

namespace 可以理解为 Java 中的包名,命名空间可以用于区分部署环境,而 Group 和 DataID 在逻辑上区分对象。命名空间默认 public,组默认 DEFAULT_GROUP , 而 DataID 则根据不同子项目变化。

从使用上来说,namespace 用作隔离,不同 namespace 代表了不同的项目配置划分(生产环境和开发环境做区分), Group 用作分组,表示哪一些微服务间可以相互访问,DataID 则代表了每一个微服务的独立 id。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nacos
    • 配置
    • Nacos Config 服务配置中心
    • Nacos 数据模型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档