当前位置: 首页 > 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 请求页…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...