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

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.dtcms.com/a/281842.html

相关文章:

  • 分布式弹性故障处理框架——Polly(1)
  • 卷积神经网络-卷积的分类
  • 数据结构与算法学习(一)
  • 从函数调用到进程通信:Linux下的多语言协作实践
  • STM32 | 定时器 PWM 呼吸灯
  • 坚持继续布局32位MCU,进一步完善产品阵容,96Mhz主频CW32L012新品发布!
  • 尚庭公寓-------图片上传接口
  • 推客系统开发:从零构建高并发社交平台的技术实践
  • Python爬虫实战:研究PyYAML库相关技术
  • 多维动态规划题解——不同路径【LeetCode】递推写法空间优化
  • 【Qt开发】Qt的背景介绍(二)-> 搭建Qt开发环境
  • 从混沌到秩序:数据科学的热力学第二定律破局——线性回归的熵减模型 × 最小二乘的能量最小化 × 梯度下降的负反馈控制系统,用物理定律重构智能算法的统一场论
  • Blender 云渲染高效流程:渲染 101 集群加速实战​
  • 硬件产品的技术资料管控是确保研发可追溯、生产可复制、质量可控制的核心环节。
  • Linux 716 数据库迁移
  • NodeJS Express 静态文件、中间件、路由案例
  • iPhone 数据擦除软件评测(最新且全面)
  • 为什么要使用nginx?
  • 网络基础10 业务访问控制--ACL与包过滤
  • springboot如何redis锁
  • python学习---dayday6
  • 基于华为欧拉系统安装FileGator文件管理器
  • git本地的操作
  • Java 增强 switch 语句详解:从基础到进阶的全面指南
  • 基于conda包的环境创建、激活、管理与删除
  • 如何卸载SQLServer
  • MybatisPlus由浅入深
  • Neo4j Python 驱动库完整教程(带输入输出示例)
  • Supervisor 使用教程:进程守护的最佳实践指南
  • 06-C语言:第06天笔记