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

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

  1. 访问 Nacos 官网(Nacos 官方下载页面)下载最新版本的 Nacos。

  2. 解压文件后,进入解压目录,使用以下命令启动 Nacos 服务(默认启动 Nacos 在单机模式下):

    sh startup.sh -m standalone
    
  3. 这时,Nacos 服务将会启动,并在 http://localhost:8848/nacos 上提供访问。

  4. 访问控制台: 打开浏览器访问 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.propertiesapplication.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 创建服务消费者

  1. 创建 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 来发现并调用服务提供者。

  1. 创建服务消费者应用 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);}
    }
    

  2. 创建 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

  1. 打开 Nacos 控制台,选择左侧的 "配置管理" -> "配置列表" -> "新增配置"。
  2. 配置文件内容如下(假设文件类型为 .properties):
    # application.properties
    demo.property=HelloFromNacos
    
  3. 在 "Data ID" 中填写 application.properties,选择 GroupDEFAULT_GROUP,点击发布
  4. 在 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&#xff1f; Nacos&#xff08;Naming and Configuration Service&#xff09;是阿里巴巴开源的一个服务注册中心和配置管理中心。它支持动态服务发现、配置管理和服务治理&#xff0c;适用于微服务架构&#xff0c;尤其是基于 Spring Cloud …...

【数据结构】LRUCache|并查集

目录 一、LRUCache 1.概念 2.实现:哈希表双向链表 3.JDK中类似LRUCahe的数据结构LinkedHashMap &#x1f525;4.OJ练习 二、并查集 1. 并查集原理 2.并查集代码实现 3.并查集OJ 一、LRUCache 1.概念 最近最少使用的&#xff0c;一直Cache替换算法 LRU是Least Recent…...

智能合约中权限管理不当

权限管理不当 &#xff1a; 权限管理不当是智能合约中常见的安全问题之一&#xff0c;尤其是在管理员或特定账户被过度赋予权限的情况下。如果合约中的关键功能&#xff0c;如转移资产、修改合约状态或升级合约逻辑&#xff0c;可以被未经授权的实体随意操作&#xff0c;这将构…...

MariaDB Galera 原理及用例说明

一、底层原理 MariaDB Galera 集群是一种基于同步多主架构的高可用数据库解决方案&#xff0c;适合需要高并发、低延迟和数据强一致性的场景。以下是部署和配置 MariaDB Galera 集群的简明步骤&#xff1a; 1. 环境准备 节点要求&#xff1a;至少 3 个节点&#xff08;奇数节点…...

【RAG 篇】万字长文:向量数据库选型指南 —— Milvus 与 FAISS/Pinecone/Weaviate 等工具深度对比

大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。 欢迎关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 文章目录 向量数据库的核心价值主流工具横向对比 FAISS:Meta 的高效检索引擎Pinecone:全托管商业…...

关于服务器cpu过高的问题排查

1.定位是哪个程序造成的cpu过高 如果有云服务器&#xff0c;就用云服务器自带的监控功能&#xff0c;查时间段 如果没有&#xff0c;则使用&#xff1a; ps -eo pid,comm,pcpu,pmem,cputime --sort-cputime | head -n 100 2.定位到问题 发现是uwsgi的cpu消耗过高&#xff0…...

Gpt翻译完整版

上一篇文章收到了很多小伙伴的反馈&#xff0c;总结了一下主要以下几点&#xff1a; 1. 说不知道怎么调api 2. 目前只是把所有的中文变成了英文&#xff0c;如果想要做多语言还需要把这些关键字提炼出来成放到message_zh.properties和message_en.properties文件中&#xff0c…...

雷池WAF的为什么选择基于Docker

Docker 是一种开源的容器化平台&#xff0c;可以帮助开发人员将应用程序及其所有依赖项打包到一个称为容器的独立、可移植的环境中。Docker 的核心概念包括以下几点&#xff1a; 容器&#xff1a;Docker 使用容器来封装应用程序及其依赖项&#xff0c;使其能够在任何环境中都能…...

美股回测:历史高频分钟数据的分享下载与策略解析20250305

美股回测&#xff1a;历史高频分钟数据的分享下载与策略解析20250305 在金融分析和投资决策的精细化过程中&#xff0c;美股历史分钟高频数据发挥着至关重要的作用。这些数据以其详尽性和精确性&#xff0c;记录了股票每分钟的价格波动和成交量变化&#xff0c;为投资者提供了…...

【文生图】windows 部署stable-diffusion-webui

windows 部署stable-diffusion-webui AUTOMATIC1111 stable-diffusion-webui Detailed feature showcase with images: 带图片的详细功能展示: Original txt2img and img2img modes 原始的 txt2img 和 img2img 模式 One click install and run script (but you still must i…...

[Python入门学习记录(小甲鱼)]第3章 Python基础知识

第3章 基础知识 前面三章都没啥用&#xff0c;这一章开始进入主题。 3.1 变量 变量顾名思义就是一个可变的量&#xff0c;但Python的变量更像是一个名字&#xff0c;通过这个名字可以找到我们想要的值。注意点如下&#xff1a; Python不需要显式声明&#xff0c;但使用之前…...

某系统webpack接口泄露引发的一系列漏洞

视频教程在我主页简介或专栏里 &#xff08;不懂都可以来问我 专栏找我哦&#xff09; 目录&#xff1a; 信息搜集 未授权敏感信息泄露越权任意用户密码重置 1.越权访问 2.大量敏感信息 越权 任意用户密码重置 信息搜集 这里找到从小穿一条裤子长大的兄弟&#xff0c;要挟他交…...

【计算机网络入门】初学计算机网络(十一)重要

目录 1. CIDR无分类编址 1.1 CIDR的子网划分 1.1.1 定长子网划分 1.1.2 变长子网划分 2. 路由聚合 2.1 最长前缀匹配原则 3. 网络地址转换NAT 3.1 端口号 3.2 IP地址不够用&#xff1f; 3.3 公网IP和内网IP 3.4 NAT作用 4. ARP协议 4.1 如何利用IP地址找到MAC地址…...

决策树(Decision Tree)基础知识

目录 一、回忆1、*机器学习的三要素&#xff1a;1&#xff09;*函数族2&#xff09;*目标函数2.1&#xff09;*模型的其他复杂度参数 3&#xff09;*优化算法 2、*前处理/后处理1&#xff09;前处理&#xff1a;特征工程2&#xff09;后处理&#xff1a;模型选择和模型评估 3、…...

Nat Mach Intell | AI分子对接算法评测

《Nature Machine Intelligence》发表重磅评测&#xff0c;系统评估AI与物理方法在虚拟筛选&#xff08;VS&#xff09;中的表现&#xff0c;突破药物发现效率瓶颈。 核心评测体系&#xff1a;三大数据集 研究团队构建了三个新型测试集&#xff1a; TrueDecoy&#xff1a;含14…...

【自学笔记】Hadoop基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Hadoop基础知识点总览1. Hadoop简介2. Hadoop生态系统3. HDFS&#xff08;Hadoop Distributed File System&#xff09;HDFS基本命令 4. MapReduceWordCount示例&am…...

【Linux】使用问题汇总

#1 ssh连接的时候报Key exchange failed 原因&#xff1a;服务端版本高&#xff0c;抛弃了一些不安全的交换密钥算法&#xff0c;且客户端版本比较旧&#xff0c;不支持安全性较高的密钥交换算法。 解决方案&#xff1a; 如果是内网应用&#xff0c;安全要求不这么高&#xf…...

(二 十 二)趣学设计模式 之 备忘录模式!

目录 一、 啥是备忘录模式&#xff1f;二、 为什么要用备忘录模式&#xff1f;三、 备忘录模式的实现方式四、 备忘录模式的优缺点五、 备忘录模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;…...

交叉编译openssl及curl

操作环境&#xff1a;Ubuntu20.04 IDE工具&#xff1a;Clion2020.2 curl下载地址&#xff1a;https://curl.se/download/ openssl下载地址&#xff1a;https://openssl-library.org/source/old/index.html 直接交叉编译curl会报错找不到openssl&#xff0c;所以需要先交叉编…...

【每日八股】计算机网络篇(三):IP

目录 DNS 查询服务器的基本流程DNS 采用 TCP 还是 UDP&#xff0c;为什么&#xff1f;默认使用 UDP 的原因需要使用 TCP 的场景&#xff1f;总结 DNS 劫持是什么&#xff1f;解决办法&#xff1f;浏览器输入一个 URL 到显示器显示的过程&#xff1f;URL 解析TCP 连接HTTP 请求页…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

mcts蒙特卡洛模拟树思想

您这个观察非常敏锐&#xff0c;而且在很大程度上是正确的&#xff01;您已经洞察到了MCTS算法在不同阶段的两种不同行为模式。我们来把这个关系理得更清楚一些&#xff0c;您的理解其实离真相只有一步之遥。 您说的“select是在二次选择的时候起作用”&#xff0c;这个观察非…...

河北对口计算机高考MySQL笔记(完结版)(2026高考)持续更新~~~~

MySQL 基础概念 数据&#xff08;Data&#xff09;&#xff1a;文本&#xff0c;数字&#xff0c;图片&#xff0c;视频&#xff0c;音频等多种表现形式&#xff0c;能够被计算机存储和处理。 **数据库&#xff08;Data Base—简称DB&#xff09;&#xff1a;**存储数据的仓库…...

Vuex:Vue.js 应用程序的状态管理模式

什么是Vuex&#xff1f; Vuex 是专门为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 在大型单页应用中&#xff0c;当多个组件共享状态时&#xff0c;简单的单向数据流…...

设备健康管理的范式革命:中讯烛龙全链路智能守护系统

当工业设备的“亚健康”状态导致隐性产能损失高达23%时&#xff0c;中讯烛龙推出 ​​“感知-诊断-决策-闭环”四位一体解决方案&#xff0c;让设备全生命周期健康管理成为企业增长的隐形引擎。 一、行业痛点&#xff1a;传统运维的三大断层 1. 健康感知盲区 某风电场因无法捕…...