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

Gartner:数据安全平台DSP提升数据流转及使用安全

2025 年 1 月 7 日&#xff0c;Gartner 发布“China Context&#xff1a;Market Guide for Data Security Platforms”&#xff08;《数据安全平台市场指南——中国篇》&#xff0c;以下简称指南&#xff09;&#xff0c;报告主要聚焦中国数据安全平台&#xff08;Data Securit…...

从vue源码解析Vue.set()和this.$set()

前言 最近死磕了一段时间vue源码&#xff0c;想想觉得还是要输出点东西&#xff0c;我们先来从Vue提供的Vue.set()和this.$set()这两个api看看它内部是怎么实现的。 Vue.set()和this.$set()应用的场景 平时做项目的时候难免不会对 数组或者对象 进行这样的骚操作操作&#xff…...

深入浅出:UniApp 从入门到精通全指南

https://juejin.cn/post/7440119937644101684 uni-app官网 uniapp安卓离线打包流程_uniapp离线打包-CSDN博客 本文是关于 UniApp 从入门到精通的全指南&#xff0c;涵盖基础入门&#xff08;环境搭建、创建项目、项目结构、编写运行&#xff09;、核心概念与进阶知识&#x…...

DeepSeek未来发展趋势:开创智能时代的新风口

DeepSeek未来发展趋势&#xff1a;开创智能时代的新风口 随着人工智能&#xff08;AI&#xff09;、深度学习&#xff08;DL&#xff09;和大数据的飞速发展&#xff0c;众多创新型技术已经逐渐走向成熟&#xff0c;而DeepSeek作为这一领域的新兴力量&#xff0c;正逐步吸引越…...

阻塞队列的实现(线程案例)

一.什么是阻塞队列&#xff1f; 1.如果对于一个满的队列&#xff0c;还要把元素入队列&#xff0c;此时这个队列就会阻塞等待&#xff0c;一直阻塞到这个队列不满为止&#xff0c;从而把这个元素入队列&#xff01; 2.如果对于一个空的队列&#xff0c;还要从队列拿出元素&…...

http status是什么?常见的http状态码指的是什么意思?

HTTP 状态码 HTTP 状态码&#xff08;HTTP Status Code&#xff09;是服务器在响应客户端请求时返回的一个三位数字代码&#xff0c;用于表示请求的处理结果。HTTP 状态码是 HTTP 协议的一部分&#xff0c;帮助客户端&#xff08;如浏览器或应用程序&#xff09;了解请求是否成…...

react组件分离,降低耦合

分离前 分离后...

【AI】AI白日梦+ChatGPT 三分钟生成爆款短视频

引言 随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;AI在各个领域都展现出了强大的应用潜力。其中&#xff0c;自然语言处理技术的进步使得智能对话系统得以实现&#xff0c;而ChatGPT作为其中的代表之一&#xff0c;具有自动生成文本的能力&#xff0c;为…...

MYSQL的安装教程

mysql安装分为&#xff1a;普通安装和压缩包安装 压缩包安装很多会存在安装失败的情况&#xff0c;所以我这里就用了普通安装 一、官网下载安装包 www.mysql.com 点击DOWNLOADS&#xff1a; 进入社区版本下载&#xff1a; 点击最下面一行进行下载&#xff1a; 选择第二个离…...

深入解析 C# 中的泛型:概念、用法与最佳实践

C# 中的 泛型&#xff08;Generics&#xff09; 是一种强大的编程特性&#xff0c;允许开发者在不预先指定具体数据类型的情况下编写代码。通过泛型&#xff0c;C# 能够让我们编写更灵活、可重用、类型安全且性能优良的代码。泛型广泛应用于类、方法、接口、委托、集合等多个方…...