找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4077

积分

0

好友

565

主题
发表于 3 天前 | 查看: 36| 回复: 0

Nacos 是阿里巴巴开源的一个集服务发现、配置管理、服务元数据与流量管理于一体的微服务管理平台。本文将聚焦其两大核心功能——配置中心与服务注册中心,通过一个具体的 Spring Cloud 整合示例,带你从零开始实践。

1 安装部署

1.1 Linux 环境安装

首先搭建一个单机模式的 Nacos 服务。安装方式有两种:下载源码编译,或直接使用编译好的发布包。为了快速上手,我们选择后者。

访问 Nacos 的 GitHub 发布页面下载安装包,这里以 2.0.2 版本为例:

https://github.com/alibaba/nacos/releases/tag/2.0.2

在 Linux 环境下,有时会遇到 Java 环境问题。如果启动失败,可以先检查并确保 JDK 环境配置正确。一个常见的解决方法是重新安装 OpenJDK 1.8:

yum erase java-1.* #删除原来的jdk
yum install java-1.8.0-openjdk* -y #重新安装jdk

确认 JDK 无误后,进入 Nacos 的 bin 目录,以单机模式启动:

[root@master bin]# sh startup.sh -m standalone
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/bin/java  -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Djava.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/ext:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/lib/ext -Xloggc:/root/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/root/nacos/plugins/health,/root/nacos/plugins/cmdb -Dnacos.home=/root/nacos -jar /root/nacos/target/nacos-server.jar  --spring.config.additional-location=file:/root/nacos/conf/ --logging.config=/root/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with standalone
nacos is starting,you can check the /root/nacos/logs/start.out

1.2 访问管理界面

启动成功后,在浏览器中输入你的服务器地址与端口(默认 8848):

http://192.168.59.151:8848/nacos/index.html#/login

你会看到 Nacos 的登录界面。

Nacos 登录界面

使用默认账号密码 nacos/nacos 登录,即可进入管理控制台的主页。

Nacos 配置管理首页

2 作为配置中心使用

Nacos 能与 Spring Boot、Spring Cloud 等多种技术栈轻松集成,下面我们看看如何在 Spring Cloud 项目中将其作为配置中心

2.1 项目配置步骤

  1. 添加依赖:在项目的 pom.xml 中加入 Nacos Config 的 SpringBoot 启动器。

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>${latest.version}</version>
    </dependency>

    版本匹配提示:latest.version 需与你的 Spring Boot 主版本对应。例如,Spring Boot 2.1.x 项目建议使用 Nacos 2.1.x.RELEASE。实际测试中,Spring Boot 2.1.6 搭配 Nacos 2.1.4 运行正常。

  2. 创建 bootstrap.properties:在 application.properties 同级目录下创建此文件,添加核心配置。

    #Nacos server地址
    spring.cloud.nacos.config.server-addr=192.168.59.151:8848
    #配置前缀,如果不配置,默认是spring.application.name
    spring.cloud.nacos.config.prefix=example
    #dataId后缀,支持properties或yaml
    spring.cloud.nacos.config.file-extension=properties

    在 Spring Cloud 整合 Nacos 的约定中,一个配置项对应的完整 dataId 格式为:

    ${prefix}-${spring.profiles.active}.${file-extension}

    注意事项

    • spring.profiles.active 代表当前环境(如 dev, prod)。当其为空时,连接符 - 也会消失,格式变为 ${prefix}.${file-extension}
    • file-extension 目前仅支持 propertiesyaml 两种格式。

    根据以上配置,当 spring.profiles.active=dev 时,对应的 dataId 即为 example-dev.properties

2.2 测试动态配置

要实现配置的动态刷新,只需在读取配置的 Bean 上添加 @RefreshScope 注解。以下是一个来自官方示例的控制器:

@Controller
@RequestMapping("config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping(value = "/get", method = GET)
    @ResponseBody
    public boolean get() {
        return useLocalCache;
    }
}

现在,我们可以通过 Nacos 控制台或 API 来管理配置。例如,通过 curl 命令向 Nacos 写入一个配置:

curl -X POST "http://192.168.59.151:8848/nacos/v1/cs/configs?dataId=example-dev.properties&group=DEFAULT_GROUP&content=useLocalCache=true"

执行后,在 Nacos 控制台的“配置列表”中就能看到我们新增的配置。

Nacos 配置列表显示新增配置

点击“详情”,可以查看具体的配置内容。

Nacos 配置详情页面

此时,调用上述 ConfigController/config/get 接口将返回 true。如果通过命令将 useLocalCache 的值改为 false 并再次发布:

curl -X POST "http://192.168.59.151:8848/nacos/v1/cs/configs?dataId=example-dev.properties&group=DEFAULT_GROUP&content=useLocalCache=false"

应用会自动感知到配置变化,再次调用接口将返回 false,无需重启。在控制台点击配置项后的“示例代码”,可以看到如何获取该配置的示例,即我们上面编写的 Controller 代码。

Nacos 配置示例代码链接

3 作为服务注册中心使用

除了配置管理,Nacos 更广为人知的身份是服务注册中心。接下来我们配置一个简单的服务提供者和消费者。

3.1 配置服务提供者 (Producer)

  1. 添加依赖:在 pom.xml 中加入 Nacos Discovery 启动器。

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>${latest.version}</version>
    </dependency>

    版本匹配规则与配置中心依赖相同。

  2. 配置 Nacos 服务器地址:在 application.properties 中指定。

    spring.cloud.nacos.discovery.server-addr=192.168.59.151:8848
  3. 启用服务发现:在 Spring Boot 主启动类上添加 @EnableDiscoveryClient 注解。

  4. 指定服务名

    spring.application.name=springboot-producer

3.2 配置服务调用者 (Consumer)

配置步骤与服务提供者几乎一致,只需修改服务名称以作区分:

spring.application.name=springboot-consumer

3.3 服务注册与发现测试

分别启动服务提供者 (springboot-producer) 和服务消费者 (springboot-consumer) 应用。登录 Nacos 控制台,进入“服务管理” -> “服务列表”,可以看到两个服务已成功注册。

Nacos 服务列表显示已注册的服务

接下来,在 springboot-producer 中编写一个简单的接口:

@Controller
@RequestMapping("/producer")
public class FeignTestController {

    @RequestMapping("/result")
    @ResponseBody
    public String getResult() throws InterruptedException {
        return "success";
    }
}

springboot-consumer 中,通过 OpenFeign 声明式地调用该接口:

@FeignClient(value = "springboot-producer", configuration = FeignMultipartSupportConfig.class)
public interface FeignAsEurekaClient {
    @GetMapping("/producer/result")
    String feignReadTimeout();
}

启动测试,消费者能够成功通过服务名 springboot-producer 发现并调用提供者的接口,返回 “success”。这证明了 Nacos 作为注册中心的服务发现能力运行正常。

4 遇到的一个问题

在实践过程中,曾遇到一个配置动态刷新的问题。当本地应用使用 HikariCP 作为数据库连接池时,通过 Nacos 配置中心 修改数据库相关配置并通知应用后,日志中会出现 notify-error,提示绑定数据库参数失败。初步分析,这可能是连接池兼容性问题,理论上切换为 Druid 连接池应能解决,但此结论有待进一步验证。

结语

通过以上步骤,我们完成了 Nacos 作为配置中心和服务注册中心的基本集成与功能验证。从安装部署到与 Spring Cloud 的整合,整个过程清晰地展示了 Nacos 如何简化微服务架构中的服务治理与配置管理。希望这篇实践指南能帮助你快速上手 Nacos。如果你想探索更多关于微服务云原生的实践与讨论,欢迎关注云栈社区的相关技术板块。




上一篇:前端 AI 提效:用 react-grab 消除找代码内耗
下一篇:从ZooKeeper迁移到Nacos:在Dubbo微服务架构下的实践与优化
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-10 16:13 , Processed in 0.417226 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表