Spring Cloud Alibaba 实战:轻松实现 Nacos 服务发现与动态配置管理
1. Nacos 介绍
1.1 什么是 Nacos?
Nacos(Naming and Configuration Service)是阿里巴巴开源的一个服务注册中心和配置管理中心。它支持动态服务发现、配置管理和服务治理,适用于微服务架构,尤其是基于 Spring Cloud 和 Kubernetes 的应用。
1.2 Nacos 主要功能
-
服务发现与注册:提供类似 Eureka 的服务注册与发现功能。
-
动态配置管理:可替代 Spring Cloud Config,实现配置的集中管理。
-
服务健康检查:通过心跳检测服务健康状态。
-
DNS 解析:支持基于 DNS 的服务发现方式。
-
多环境、多租户管理。
2. 环境准备
- JDK:确保你安装了 JDK 8 或以上版本。
- Spring Boot:版本建议使用 2.3 或以上。
- Nacos 服务:确保你已经下载并启动了 Nacos 服务器,可以使用 Nacos GitHub 或官方网站来下载和启动。
2.1 下载并启动 Nacos
-
访问 Nacos 官网(Nacos 官方下载页面)下载最新版本的 Nacos。
-
解压文件后,进入解压目录,使用以下命令启动 Nacos 服务(默认启动 Nacos 在单机模式下):
sh startup.sh -m standalone -
这时,Nacos 服务将会启动,并在
http://localhost:8848/nacos上提供访问。 -
访问控制台: 打开浏览器访问
http://localhost:8848/nacos,使用默认的账号密码登录:- 用户名:
nacos - 密码:
nacos
- 用户名:
3. Spring Cloud Alibaba Nacos 配置
3.1 引入依赖
在 Spring Boot 项目中添加必要的依赖。确保你的 pom.xml 文件中包含以下内容:
<dependencies><!-- Spring Boot Web Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Cloud Alibaba Nacos Discovery --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- Spring Cloud Alibaba Nacos Config --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- Spring Cloud OpenFeign (Optional, for service consumer) --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- Spring Boot Actuator (Optional, for monitoring) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
</dependencies>
这里:
spring-cloud-starter-alibaba-nacos-discovery是 Spring Cloud Nacos 服务注册与发现模块。spring-cloud-starter-alibaba-nacos-config用于配置管理。spring-cloud-starter-openfeign用于服务消费者时的 Feign 客户端调用(可选)。
3.2 配置 Nacos 地址
在 application.properties 或 application.yml 中配置 Nacos 的地址和应用信息:
# 应用名称,用于服务注册
spring.application.name=demo-service# Nacos 服务注册中心的地址
spring.cloud.nacos.discovery.server-addr=localhost:8848# 配置管理服务的地址
spring.cloud.nacos.config.server-addr=localhost:8848# 配置的文件类型
spring.cloud.nacos.config.file-extension=properties
这些配置项的解释:
spring.application.name:Spring Boot 应用的名称,用于在 Nacos 注册。spring.cloud.nacos.discovery.server-addr:Nacos 服务发现模块的地址。spring.cloud.nacos.config.server-addr:Nacos 配置中心的地址,用于配置管理。
4. 服务注册与发现
4.1 创建服务提供者
我们首先创建一个服务提供者,这个服务会在启动时注册到 Nacos 服务注册中心。
服务消费者可以通过 Nacos 来发现并调用服务提供者。
当你启动 DemoServiceApplication 应用时,服务会自动注册到 Nacos,您可以通过访问 http://localhost:8080/hello 来测试服务。
4.2 创建服务消费者
- 创建 Spring Boot 应用
DemoServiceApplication:package com.example.demo;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@SpringBootApplication @EnableDiscoveryClient // 启用服务发现 public class DemoServiceApplication {public static void main(String[] args) {SpringApplication.run(DemoServiceApplication.class, args);} }创建一个简单的控制器
HelloController:package com.example.demo;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class HelloController {@GetMapping("/hello")public String sayHello() {return "Hello, Nacos!";} }
在上述代码中:
@EnableDiscoveryClient注解使得 Spring Boot 应用能注册到 Nacos 注册中心。/hello接口用于向消费者提供服务。
当你启动 DemoServiceApplication 应用时,服务会自动注册到 Nacos,您可以通过访问 http://localhost:8080/hello 来测试服务。
服务消费者可以通过 Nacos 来发现并调用服务提供者。
- 创建服务消费者应用
DemoConsumerApplication:package com.example.consumer;import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@SpringBootApplication @EnableDiscoveryClient // 启用服务发现 @EnableFeignClients // 启用 Feign 客户端 public class DemoConsumerApplication {public static void main(String[] args) {SpringApplication.run(DemoConsumerApplication.class, args);} } - 创建 Feign 客户端接口
HelloFeignClient
package com.example.consumer;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;@FeignClient(name = "demo-service") // 与服务提供者的应用名匹配
public interface HelloFeignClient {@GetMapping("/hello")String sayHello();
}
3.创建控制器 HelloController 用于消费服务:
package com.example.consumer;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@Autowiredprivate HelloFeignClient helloFeignClient;@GetMapping("/consume")public String consumeService() {return helloFeignClient.sayHello(); // 使用 Feign 调用服务提供者}
}
@FeignClient(name = "demo-service")中name是服务提供者的应用名称。Fein 会自动从 Nacos 获取服务实例并进行调用。/consume接口通过 Feign 客户端调用服务提供者的/hello接口。
5. 配置管理
Nacos 还可以作为配置中心,动态管理应用配置。
5.1 上传配置到 Nacos
- 打开 Nacos 控制台,选择左侧的 "配置管理" -> "配置列表" -> "新增配置"。
- 配置文件内容如下(假设文件类型为
.properties):# application.properties demo.property=HelloFromNacos - 在 "Data ID" 中填写
application.properties,选择Group为DEFAULT_GROUP,点击发布 -
在 Spring Boot 中,可以通过
@Value注解直接获取配置项:package com.example.demo;import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class ConfigController {@Value("${demo.property}")private String demoProperty;@GetMapping("/config")public String getConfig() {return demoProperty; // 返回从 Nacos 获取的配置} }
这里:
@Value("${demo.property}")读取 Nacos 中配置的demo.property属性。
5.2动态刷新配置
当 Nacos 中的配置发生变化时,Spring Cloud Alibaba Nacos 支持动态刷新配置。为了实现这个功能,我们可以使用 @RefreshScope 注解。
在 ConfigController 中:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RefreshScope
@RestController
public class ConfigController {@Value("${demo.property}")private String demoProperty;@GetMapping("/config")public String getConfig() {return demoProperty;}
}
@RefreshScope会使得当配置变化时,Spring 会自动刷新配置的值,而不需要重启应用。
6. 总结
通过 Spring Cloud Alibaba Nacos,你可以:
- 实现服务注册与发现,利用 Nacos 注册中心进行服务管理。
- 使用 Feign 客户端轻松实现服务间通信。
- 动态管理配置,并通过 Nacos 配置中心实现配置的动态更新。
这套方案非常适合用于构建微服务架构,尤其是需要服务注册与发现、配置管理以及动态刷新功能的场景。
相关文章:
Spring Cloud Alibaba 实战:轻松实现 Nacos 服务发现与动态配置管理
1. Nacos 介绍 1.1 什么是 Nacos? Nacos(Naming and Configuration Service)是阿里巴巴开源的一个服务注册中心和配置管理中心。它支持动态服务发现、配置管理和服务治理,适用于微服务架构,尤其是基于 Spring Cloud …...
关于sqlalchemy的使用
关于sqlalchemy的使用 说明一、sqlachemy总体使用思路二、安装与创建库、连结库三、创建表、增加数据四、查询记录五、更新或删除六、关联表定义 说明 本教程所需软件及库python3.10、sqlalchemy安装与创建库、连结库创建表、增加数据查询记录 一、sqlachemy总体使用思路 在…...
三维建模与视频融合(3D-Video Integration)技术初探。
三维建模与视频融合(3D-Video Integration)是一种将虚拟三维模型无缝嵌入实拍视频场景的技术,广泛应用于影视特效、增强现实(AR)、游戏开发、广告制作 、视频监控 等领域。 一、技术核心流程 三维建模与动画 使用工具…...
springboot3 RestClient、HTTP 客户端区别
1 RestClient使用 RestClient 是 Spring 6.1 M2 中引入的同步 HTTP 客户端,它取代了 RestTemplate。同步 HTTP 客户端以阻塞方式发送和接收 HTTP 请求和响应,这意味着它会等待每个请求完成后才继续下一个请求。本文将带你了解 RestClient 的功能以及它与…...
分布式存储学习——HBase概述
1.1 HBase概述 1.1.1 理解大数据背景 1.1.2 HBase是什么 1.1.3 HBase与Hadoop的关系 1.1.4 HBase的核心功能模块 1.1.5 HBase的应用场景和经典案例 1.1.6 小结 本文参考于学校《HBase应用于开发》教材 1.1 HBase概述 本节将介绍大数据背景和HBase的基本概念,…...
LLM run
lmstudio lmstudio ollama ollama N 卡使用自带UI gpu加速推理 ,选择满足条件的, ds模型选择列表 https://ollama.com/library/deepseek-r1 a卡当前支持的显卡型号 I卡 gpu加速配置 2025.3 intel Official project optimization https://www.modelscope.cn/m…...
HttpServletRequest、ServerHttpRequest 和 ServerWebRequest作用详解
1、HttpServletRequest 所属框架:Java Servlet API(基于阻塞式 I/O)。 使用场景:传统的 Servlet 应用(如 Spring MVC的Tomcat、常用的容器等等)。 作用:表示客户端的 HTTP 请求。 常用方法&a…...
【大模型基础_毛玉仁】2.2 大语言模型架构概览
【大模型基础_毛玉仁】2.2 大语言模型架构概览 2.2 大语言模型架构概览2.2.1 主流模型架构的类别1)Encoder-only 架构2)Encoder-Decoder 架构3)Decoder-only 架构 2.2.2 模型架构的功能对比1)注意力矩阵2)适用任务 2.2…...
微信小程序点击按钮,将图片下载到本地
前言: 最近在公司完成一个小程序的时候需要实现一个功能:点击按钮获取用户相册权限,将图片下载到用户本地相册,经过了好几次的尝试最终算是实现了。将总结的经验在这里分享给小伙伴们。 实现方式: //.wxml文件 <…...
在Linux系统上集成OpenSlide与SpringBoot
本文档详细介绍如何在Linux系统上安装OpenSlide并将其与Spring Boot应用程序集成,以实现数字病理切片的处理和查看功能。 目录 OpenSlide简介在Linux上安装OpenSlide安装OpenSlide Java绑定在Spring Boot项目中集成OpenSlide示例代码性能优化建议常见问题解决参考资源OpenSli…...
现代密码学体系架构设计原则与实践:基于Python的实现与GPU加速GUI演示
目录 现代密码学体系架构设计原则与实践:基于Python的实现与GPU加速GUI演示一、前言二、现代密码学体系架构设计原则1. 安全性原则2. 模块化设计3. 最小权限原则4. 加密算法的选择5. 硬件加速与GPU应用6. 可扩展性与可维护性三、主要加密算法解析1. 对称加密算法:AES2. 非对称…...
pt-archiver删除数据库的数据表/各种报错类型
这篇帖子是前面文的一部分延申 mysqlimport导入一亿数据的csv文件/一行命令删除表-CSDN博客 如需转载,标记出处 目录 pt-archiver命令格式 如果执行后出现下面报错 1)Cannot find an ascendable index in table at /usr/bin/pt-archiver line 3233. …...
LLM 学习(一 序言)
文章目录 LLM 学习(一 序言)知识点1:“Embedding” 在人工智能领域:知识点2:Embedding 引入位置信息的原因知识点3:在 Transformer 的 Decoder 翻译第 i 个单词时进行 Mask 第 i1 个单词的操作 LLM 学习&am…...
STM32-HAL库初始化时钟
使能和失能外设GPIOA 时钟信号初始化函数 HAL_RCC_OscConfig函数: HAL_StatusTypeDef是该函数的返回值类型,最顶上的那句话只是这个函数的原型 HAL_RCC_ClockConfig函数: 因为FLASH实际上只能支持24MHz的时钟信号所以如果用高于24MHz的信号输入则要用到等…...
MySQL主从架构配合ShardingJdbc实现读写分离
文章目录 目录架构搭建读写分离pom.xmlfdy-live-user-provider 模块application.ymlfdy-db-sharding.yamlShardingJdbcDatasourceAutoInitConnectionConfig.java 目录 架构搭建 基于Docker去创建MySQL的主从架构 读写分离 pom.xml <dependency><groupId>mysql…...
批量将 Word 拆分成多个文件
当一个 Word 文档太大的时候,我们通常会将一个大的 Word 文档拆分成多个小的 Word 文档,在 Office 中拆分 Word 文档是比较麻烦的,我们需要将 Word 文档的页面复制到另外一个 Word 文档中去,然后删除原 Word 文档中的内容。当然也…...
【算法系列】桶排序算法介绍及实现
文章目录 桶排序算法介绍及实现桶排序的基本原理算法实现步骤Java代码实现性能优化结论 桶排序算法介绍及实现 桶排序的基本原理 桶排序(Bucket Sort)是一种基于分组的排序算法,其核心思想是将一组数据按某种 规则分配到多个桶中࿰…...
当AI开始“思考“:拆解大模型训练与推理的秘密(以DeepSeek为例)
如果你用过deepseek,可能体验过它在几秒内编故事、写代码的震撼。但你是否想过,这种"智能输出"背后存在两种完全不同的底层机制?就像人类需要先学习知识(训练)才能考试答题(推理)&…...
13.数据结构(软考)
13.数据结构(软考) 13.1:线性表 13.1.1 顺序表 顺序存储方式:数组的内存是连续分配的并且是静态分配的,即在使用数组之前需要分配固定大小的空间。 时间复杂度: 读:O(1) 查询:1,(n1)/2&#x…...
拉拉扯扯adfda
read -p "请输入一个成绩:" sorce if [ "$sorce" -ge 90 -a "$sorce" -le 100 ] thenecho A elif [ "$sorce" -ge 80 -a "$sorce" -lt 90 ] thenecho B elif [ "$sorce" -ge 70 -a "$sorce"…...
【计算机网络】TCP
1.基本概念及报文格式 基本概念: TCP的中文全称为传输控制协议(Transmission Control Protocol),是一种可靠的,面向连接的,基于字节流的传输层通信协议。 报文格式: 序号 :占32⽐…...
doris: PostgreSQL
Doris JDBC Catalog 支持通过标准 JDBC 接口连接 PostgreSQL 数据库。本文档介绍如何配置 PostgreSQL 数据库连接。 使用须知 要连接到 PostgreSQL 数据库,您需要 PostgreSQL 11.x 或更高版本 PostgreSQL 数据库的 JDBC 驱动程序,您可以从 Maven 仓…...
深度学习笔记——神经网络
本文为在拓尔思智能举办的训练营中学习内容的总结,部分内容摘自百度百科 个人在这里推荐一个好用的软件,Trae,主要是免费。 人工神经元是人工神经网络的基本单元。模拟生物神经元,人工神经元有1个或者多个输入(模拟多…...
django中路由配置规则的详细说明
在 Django 中,路由配置是将 URL 映射到视图函数或类视图的关键步骤,它决定了用户请求的 URL 会触发哪个视图进行处理。以下将详细介绍 Django 中路由配置的规则、高级使用方法以及多个应用配置的规则。 基本路由配置规则 1. 项目级路由配置 在 Django 项目中,根路由配置文…...
关于tomcat使用中浏览器打开index.jsp后中文显示不正常是乱码,但英文正常的问题
如果是jsp文件就在首行加 “<% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" %>” 如果是html文件 在head标签加入: <meta charset"UTF-8"> 以jsp为例子,我们…...
pytest结合allure
Allure 一、文档二、指令三、装饰器3.1 allure.step装饰器3.2 allure.description装饰器3.3 allure.title装饰器3.4 allure.link、allure.issue 和 allure.testcase装饰器3.5 allure.epic、allure.feature 和 allure.story装饰器3.6 allure.severity装饰器 一、文档 allure文档…...
机器学习在地图制图学中的应用
原文链接:https://www.tandfonline.com/doi/full/10.1080/15230406.2023.2295948#abstract CSDN/2025/Machine learning in cartography.pdf at main keykeywu2048/CSDN GitHub 核心内容 本文是《制图学与地理信息科学》特刊的扩展评论,系统探讨了机…...
vue2升vue3,uniapp兼容鸿蒙app踩坑记录
前提:最近鸿蒙势头很好,公司的 uniapp vue2 项目,要兼容鸿蒙app。就开始了我的uniapp转鸿蒙踩坑之旅,请看下文(注意下文都是在uniapp开发基础上) 1. 首先鸿蒙开发只支持Vue3,不支持Vue2、不支持…...
Linux基础网络设置
文章目录 Linux基础网络设置介绍查看和配置网络接口查看活动网络接口信息临时修改网卡IP地址永久修改IP地址启用和关闭网卡 主机名设置查看和临时修改主机名永久修改主机名 路由表设置查看路由表信息 网络连接状态和接口统计信息查看网络连接状态 网络连通性测试测试网络连通性…...
DeepSeek × 豆包深度整合指南:工作流全解析
DeepSeek 豆包深度整合指南:工作流全解析 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 DeepSeek 豆包深度整合指南:工…...
