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.pswp.cn/news/914960.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914960.shtml
英文地址,请注明出处:http://en.pswp.cn/news/914960.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware 虚拟机装 Linux Centos 7.9 保姆级教程(附资源包)

安装 VMware 17.5.1 centos 7.9 ​ 1、下载资源包&#xff08;虚拟机镜像&#xff09; VMware-17.5.1 安装包秘钥.zipLinux Centos 7.9 镜像 2、centos 7.9 下载地址 1、Centos 官网 2、阿里巴巴镜像站 3、查看网络命令 ifconfig 或 ip addr 4、登陆服务器 ssh stark192.168.3…

STM32超声波模块

一&#xff1a;超声波模块1&#xff1a;工作原理采用IO触发测距&#xff0c;给至少10us的高电平信号。 模块自动发送8个40KHz的方波&#xff0c;自动检测是否有信号返回。 有信号返回&#xff0c;通过IO输出一高电平&#xff0c;高电平持续时间就是超声波从发射到返回的时间声波…

RK3568项目(十一)--linux驱动开发之mipi屏幕调试

目录 一、引言 二、MIPI DSI 屏幕 ------>2.1、MIPI联盟 ------------>2.1.1、多媒体部分 ------------>2.1.2、硬件协议 ------------>2.1.3、D-PHY功能模式及速率 ------------>2.1.4、分辨率计算 ------>2.2、MIPI-DSI硬件连接 ------>2.3、传…

C语言小游戏——飞机大战

目录 引言 开发环境与工具准备 1. 开发环境配置 2. 资源文件准备 游戏设计与架构 1. 游戏核心数据结构 2. 游戏全局变量 游戏核心功能实现 1. 游戏初始化 2. 游戏主循环 3. 游戏渲染 4. 游戏状态更新 关键游戏机制实现 1. 敌机生成系统 2. 碰撞检测系统 3. 敌机…

SQLite的可视化界面软件的安装

1、如下图所示&#xff0c;DB Browser软件&#xff0c;在压缩包中。2、首先解压到一个文件夹中。例如&#xff08;D:\\DB Browser&#xff09;文件夹。解压后的内容如下图。3、将解压后的DB Browser文件夹&#xff0c;剪切到D:\Program Files\目录中。如下两图。win10操作系统下…

基于 STM32H743VIT6 的边缘 AI 实践:猫咪叫声分类 CNN 网络部署实战(已验证)中一些bug总结

前言前面发了一篇文章基于 STM32H743VIT6 的边缘 AI 实践&#xff1a;猫咪叫声分类 CNN 网络部署实战&#xff08;已验证&#xff09;。这里面有一些我遇到过的bug&#xff0c;当时基本都花了很长的时间才解决。这里将这些bug总结一下方便后续查阅。1.使用cubemx插件解析AI模型…

【机器学习】突破分类瓶颈:用逻辑回归与Softmax回归解锁多分类世界

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

Android gradle plugin agp8.6.1发布时间

Android gradle plugin agp8.6.1发布时间 Android Gradle Plugin (AGP) 的版本 8.6.1 是在2023年发布的。具体来说&#xff0c;它是在2023年4月发布的。这个版本的更新包括了多个重要的改进和修复&#xff0c;旨在提升开发者在Android开发过程中的体验和效率。 主要更新包括&am…

闭包的两种设计模式

闭包设计模式 概述 闭包是 JavaScript 中的一个重要概念&#xff0c;它允许内层函数访问外层函数的变量。在实际开发中&#xff0c;闭包经常被用于实现特定的设计模式&#xff0c;主要包括辅助函数模式和工厂模式。 1. 辅助函数模式&#xff08;Helper Function Pattern&#x…

力扣119:杨辉三角Ⅱ

力扣119:杨辉三角Ⅱ题目思路代码题目 给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 思路 杨辉三角的规律&#xff1a; 第n行有n1个数&#xff0c;n从0开始每行的第一个数和最后一个数都是1。除了第一行的数其他的数都是由它左上角和右上角的…

@Linux自建证书 Nginx+HTTPS

文章目录Linux自建证书并配置Nginx HTTPS1. 准备工作2. 安装必要的工具3. 自建证书脚本3.1 创建CA根证书&#xff08;可选&#xff0c;用于自签名证书链&#xff09;3.2 创建服务器证书脚本4. 证书文件说明5. 配置Nginx使用HTTPS5.1 创建证书存放目录5.2 配置Nginx站点5.3 启用…

解决 RAGFlow报错 `peewee.OperationalError: (1045)`:MySQL 容器密码错误排查手记

文章目录 🕵️‍♂️ 深度排查过程 🔧 完美解决方案:同步真实密码 ✅ 验证结果 📌 经验总结与最佳实践 问题现象: 部署 ragflow 时遭遇以下错误,且访问前端页面无响应: peewee.OperationalError: (1045, "Access denied for user root@192.168.48.6")关键线…

lwIP WebSocket 客户端 TCP PCB 泄漏问题分析与解决

在嵌入式开发中&#xff0c;使用 lwIP 实现 WebSocket 客户端时&#xff0c;偶尔会遇到反复连接导致 TCP PCB&#xff08;Protocol Control Block&#xff09;泄漏&#xff0c;最终连接数达到上限&#xff08;如 4&#xff09;后无法再建立新连接的问题。本文将结合实际案例&am…

k8s之Attach 和 Mount

Attach 和 Mount 一、核心概念对比操作Attach&#xff08;挂载设备&#xff09;Mount&#xff08;挂载文件系统&#xff09;定义将存储卷&#xff08;如 EBS、NFS 等&#xff09;连接到宿主机将已 Attach 的存储设备映射为宿主机上的文件系统路径执行者云提供商驱动&#xff08…

API Gateway HTTP API 控制客户端访问 IP 源

前言 在 API Gateway REST API 中我们可以配置 Resource policy 来实现对特定客户端 IP 地址的限制. 然而 HTTP API 并不提供这个功能, 不过我们可以用 Lambda 搓一个 Authorizer 实现等效的功能. 创建 Lambda authorizer import json import os import ipaddressdef lambda…

Linux搭建LAMP环境(CentOS 7 与 Ubuntu 双系统教程)

Linux搭建LAMP环境 一、LAMP 环境核心概念 定义&#xff1a;由 Linux、Apache、MySQL、PHP 四大组件组成的开源 Web 应用平台本质&#xff1a;四个独立开源软件的组合体&#xff0c;因长期协同使用形成高度兼容性&#xff0c;成为动态网站和服务器的主流解决方案 二、LAMP 四大…

c# 开机自动启动程序

以下是两种实现C#软件开机自启动的常用方法&#xff0c;根据需求选择适合的方案&#xff1a; 方法1&#xff1a;通过注册表实现&#xff08;需管理员权限&#xff09; using Microsoft.Win32; using System.Diagnostics;public static class AutoStartManager {/// <summa…

C语言---动态内存管理

为什么要有动态内存分配我们在学习动态内存管理之前&#xff0c;一直都是通过开辟变量&#xff0c;或者是开辟数组的方式来在内存的栈区开辟空间的&#xff0c;但是这样的开辟方式有局限性&#xff0c;因为一旦开辟之后&#xff0c;它们的大小就无法改变&#xff0c;就缺少了很…

C++标准库(std)详解

C标准库&#xff08;std&#xff09;详解——目录C标准库&#xff08;std&#xff09;详解一、命名空间&#xff08;namespace&#xff09;二、主要组件1. 输入输出流&#xff08;<iostream>&#xff09;2. 字符串处理&#xff08;<string>&#xff09;3. STL容器&…

ESP32的OTA升级详解:3. 搭建node/python服务器升级(native ota原生API)

一、OTA两种方式&#xff1a;app_update 与 esp_https_ota 区别 ESP32/ESP32-S2/ESP32-C3等可通过Wi-Fi或以太网下载新固件到OTA分区实现运行时升级。ESP-IDF提供两种OTA升级方法&#xff1a; 使用app_update组件的原生API使用esp_https_ota组件的简化API(支持HTTPS升级) 本次…