当前位置: 首页 > web >正文

Spring Boot 整合 Nacos 实战教程:服务注册发现与配置中心详解

Spring Boot 整合 Nacos 教程(3000字)

一、Nacos 简介

Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台,致力于帮助开发者更轻松地构建云原生应用。它支持多种注册中心协议(如 Dubbo、Spring Cloud、Kubernetes 等),并提供统一的配置中心功能。

Nacos 的核心功能包括:

  • 服务注册与发现:支持服务的自动注册与健康检查,便于实现服务治理。
  • 配置中心:支持配置的集中管理与动态更新,避免配置文件的重复维护。
  • 服务管理:提供服务的元数据管理、权重调整、流量控制等能力。

更多请看文章 《Windows环境下Nacos安装与部署全攻略:从零开始的详细教程》

二、开发环境准备

1. 安装 Nacos Server

你可以选择本地安装或者使用 Docker 安装 Nacos。

本地安装步骤:
  1. 下载 Nacos Server:https://github.com/alibaba/nacos/releases
  2. 解压后进入 bin 目录。
  3. 启动单机模式:
# Windows
startup.cmd -m standalone# Linux / Mac
sh startup.sh -m standalone
  1. 访问 Nacos 控制台:http://localhost:8848/nacos,默认账号密码为 nacos/nacos
Docker 安装方式:
docker run -d -p 8848:8848 -p 9848:9848 nacos/nacos-server:latest

2. 创建 Spring Boot 工程

使用 Spring Initializr 或 IDE 创建 Spring Boot 项目,添加以下依赖:

  • Spring Web
  • Spring Cloud Alibaba Nacos Discovery
  • Spring Cloud Alibaba Nacos Config

Maven 依赖如下:

<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2022.0.0.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
</dependencies>

三、Spring Boot 整合 Nacos 服务注册与发现

1. 配置 Nacos 服务发现

application.yml 中添加以下配置:

server:port: 8080spring:application:name: nacos-service-providercloud:nacos:discovery:server-addr: localhost:8848

2. 启用服务注册发现功能

在启动类上添加 @EnableDiscoveryClient 注解:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class NacosServiceProviderApplication {public static void main(String[] args) {SpringApplication.run(NacosServiceProviderApplication.class, args);}
}

3. 启动服务并查看注册情况

启动服务后,访问 Nacos 控制台 http://localhost:8848/nacos,在“服务管理” -> “服务列表”中可以看到服务已注册。

4. 创建服务消费者

创建一个消费者服务,同样配置 Nacos 注册中心:

server:port: 8081spring:application:name: nacos-service-consumercloud:nacos:discovery:server-addr: localhost:8848

启用服务发现:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosServiceConsumerApplication {public static void main(String[] args) {SpringApplication.run(NacosServiceConsumerApplication.class, args);}
}

注入 RestTemplate 并调用服务提供者:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@RestController
public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/call")public String callProvider() {String url = "http://nacos-service-provider/hello";return restTemplate.getForObject(url, String.class);}@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}

确保服务提供者有 /hello 接口:

@RestController
public class ProviderController {@GetMapping("/hello")public String sayHello() {return "Hello from provider!";}
}

四、Spring Boot 整合 Nacos 配置中心

1. 创建配置文件

登录 Nacos 控制台,进入“配置管理” -> “配置列表”,点击“+”号新增配置:

  • Data ID:nacos-service-provider.properties
  • Group:DEFAULT_GROUP
  • 配置内容:
user.config=hello nacos config

2. 配置 Spring Boot 使用 Nacos 配置中心

bootstrap.yml 中添加配置:

spring:application:name: nacos-service-providercloud:nacos:config:server-addr: localhost:8848file-extension: properties

bootstrap.yml 是在 Spring Boot 启动前加载的配置文件,用于连接配置中心。

3. 在 Spring Boot 中读取配置

创建一个配置类:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class MyConfig {@Value("${user.config}")private String userConfig;public String getUserConfig() {return userConfig;}
}

创建一个控制器来展示配置内容:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConfigController {private final MyConfig myConfig;public ConfigController(MyConfig myConfig) {this.myConfig = myConfig;}@GetMapping("/config")public String getConfig() {return myConfig.getUserConfig();}
}

访问 /config 接口即可看到从 Nacos 获取的配置值。

4. 动态刷新配置(可选)

如果你希望在不重启服务的情况下更新配置,可以添加 @RefreshScope 注解:

import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;@Component
@RefreshScope
public class MyConfig {// ...
}

五、Nacos 多环境配置管理(开发/测试/生产)

在实际项目中,我们通常需要区分不同的环境(dev、test、prod)。

1. 在 Nacos 中创建不同环境的配置文件

例如:

  • Data ID:nacos-service-provider.properties
    • Group:DEV_GROUP
  • Data ID:nacos-service-provider.properties
    • Group:TEST_GROUP
  • Data ID:nacos-service-provider.properties
    • Group:PROD_GROUP

2. 在 bootstrap.yml 中切换环境

spring:application:name: nacos-service-providercloud:nacos:config:server-addr: localhost:8848file-extension: propertiesgroup: DEV_GROUP

通过修改 group 属性切换不同环境的配置。

六、Nacos 共享配置与命名空间管理

1. 共享配置

如果你有多个微服务共享某些配置(如数据库配置),可以创建一个共享配置文件,如:

  • Data ID:shared-config.properties
  • Group:SHARED_GROUP

在 Spring Boot 中引入:

spring:cloud:nacos:config:server-addr: localhost:8848file-extension: propertiesextension-configs:- data-id: shared-config.propertiesgroup: SHARED_GROUPrefresh: true

2. 命名空间隔离

Nacos 支持多租户管理,通过命名空间(Namespace)隔离不同环境或组织的配置与服务。

获取命名空间 ID:

  1. 登录 Nacos 控制台。
  2. 进入“命名空间”页面。
  3. 新建或查看已有命名空间的 ID。

bootstrap.yml 中配置命名空间:

spring:cloud:nacos:config:namespace: your-namespace-idserver-addr: localhost:8848file-extension: properties

七、Nacos 服务元数据与权重管理

1. 添加服务元数据

application.yml 中添加:

spring:cloud:nacos:discovery:server-addr: localhost:8848metadata:version: 1.0region: beijing

在 Nacos 控制台的服务详情页可以查看元数据信息。

2. 调整服务权重

在 Nacos 控制台中,可以为不同实例设置不同的权重,用于控制流量分配。

八、Nacos 集群部署与高可用

在生产环境中,建议使用 Nacos 集群部署,以保证高可用性。

1. 部署多个 Nacos 节点

准备三台服务器,分别部署 Nacos,并配置集群模式。

2. 修改配置文件

在每台服务器的 application.properties 中配置集群地址:

nacos.cluster.servers=ip1:port1,ip2:port2,ip3:port3

3. 使用 MySQL 持久化数据

Nacos 默认使用嵌入式数据库存储数据,不适合生产环境。可以通过配置 MySQL 实现数据持久化。

  1. 创建数据库和表。
  2. 修改 application.properties
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456

九、常见问题与解决方案

1. 服务未注册成功

  • 检查 Nacos 服务是否启动。
  • 检查 server-addr 配置是否正确。
  • 查看 Spring Boot 日志是否有异常。

2. 配置无法加载

  • 检查 Data ID、Group 是否匹配。
  • 查看 bootstrap.yml 是否正确。
  • 检查 Nacos 控制台中的配置是否发布。

3. 动态配置不生效

  • 确保类上添加了 @RefreshScope 注解。
  • 检查是否引入了 spring-cloud-starter-config 依赖。

十、总结

本文详细介绍了 Spring Boot 如何整合 Nacos,包括服务注册与发现、配置中心、多环境管理、共享配置、命名空间、集群部署等内容。通过 Nacos,可以大大简化微服务架构下的服务治理与配置管理,提升开发效率与系统稳定性。

随着云原生的发展,Nacos 作为 Spring Cloud Alibaba 的核心组件之一,已经成为构建现代微服务系统的重要工具。建议在实际项目中结合 Spring Cloud Gateway、Sentinel、Seata 等组件,构建完整的微服务解决方案。

http://www.xdnf.cn/news/15614.html

相关文章:

  • 【后端】.NET Core API框架搭建(6) --配置使用MongoDB
  • 微软AutoGen:多智能体协作的工业级解决方案
  • PyCharm高效入门
  • NodeJS Express 静态文件、中间件、路由案例
  • 手撕Spring底层系列之:IOC、AOP
  • java操作Excel两种方式EasyExcel 和POI
  • 跟着Carl学算法--回溯【2】
  • React Hooks 数据请求库——SWR使用详解
  • Spring AI 系列之十四 - RAG-ETL之一
  • Vue3+Ts实现父子组件间传值的两种方式
  • Unity Android Logcat插件 输出日志中文乱码解决
  • 小白成长之路-Elasticsearch 7.0 配置
  • BNN 技术详解:当神经网络只剩下 +1 和 -1
  • 基于redis的分布式锁 lua脚本解决原子性
  • 免杀学习篇(1)—— 工具使用
  • 网页源码保护助手 海洋网页在线加密:HTML 源码防复制篡改,密文安全如铜墙铁壁
  • 基于华为欧拉系统安装FileGator文件管理器
  • 【Android】日志的使用
  • 深度学习中的激活函数:从原理到 PyTorch 实战
  • python 基于 httpx 的流式请求
  • 场景设计题+智力题
  • [Science]论文 视黄素与细胞修复
  • C++回顾 Day7
  • PyCharm 高效入门指南:从安装到效率倍增
  • [面试] 手写题-对象数组根据某个字段进行分组
  • 学习嵌入式的第二十八天-数据结构-(2025.7.15)进程和线程
  • P3842 [TJOI2007] 线段
  • Web攻防-PHP反序列化字符逃逸增多减少成员变量属性解析不敏感Wakeup绕过
  • 高等数学强化——导学
  • Android中Launcher简介