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

Spring Boot 中Nacos的用法及流程

1. 注册中心

注册中心的主要职责是管理微服务的服务注册与发现,用于实现各个服务之间的动态连接。注册中心帮助服务自动发现其他服务,无需硬编码服务地址。

  • 功能

    • 服务注册:每个服务在启动时会将自己的网络地址(如 IP、端口)注册到注册中心。
    • 服务发现:当一个服务需要调用其他服务时,可以向注册中心查询目标服务的网络位置。
    • 健康检查:注册中心可以检测每个服务的健康状态。如果服务实例异常或宕机,注册中心会将其从服务列表中移除。
    • 负载均衡支持:注册中心可以返回多实例服务的地址列表,帮助调用方进行负载均衡。
  • 适用场景:微服务之间需要相互调用,或者服务实例可能会动态启动或销毁,注册中心便于实现服务的高可用性和弹性扩展。

  • 常见实现:Nacos、Eureka、Consul、ZooKeeper 等都可以作为注册中心来管理微服务。

总结:注册中心的主要作用是管理服务的位置和状态,在服务间建立动态连接,是微服务架构中的“电话簿”。


2. 配置中心

配置中心的主要职责是管理应用程序的配置信息,为各个微服务提供统一的配置存储和管理,特别是在分布式系统中,多个服务往往需要共享或独立的配置项。

  • 功能

    • 集中化管理配置:将系统中的所有配置文件集中存储和管理,方便统一更新。
    • 动态配置更新:配置中心支持实时推送配置变更,使得应用在不重启的情况下更新配置。微服务可以根据配置变化立即调整。
    • 多环境管理:配置中心通常支持多环境配置管理(如开发、测试、生产),避免不同环境的配置干扰。
    • 配置的访问控制:配置中心可以设置权限控制,确保配置的安全性。
  • 适用场景:配置中心适用于需要动态调整配置的场景,特别是配置项较多、配置变动频繁的分布式系统。

  • 常见实现:Nacos、Spring Cloud Config、Apollo 等工具通常用于分布式系统的配置管理。

总结:配置中心的主要作用是管理应用的配置数据,在系统中提供动态、统一的配置管理,是微服务架构中的“配置仓库”。


3. 区别总结

特性注册中心配置中心
主要职责管理服务的注册与发现,提供服务地址管理应用的配置信息
作用让服务能够动态找到彼此提供统一、动态的配置管理
典型功能服务注册、服务发现、健康检查配置存储、动态更新、多环境管理
适用场景服务实例动态变化,服务间调用频繁配置项较多且变动频繁
常见工具Nacos、Eureka、Consul、ZooKeeperNacos、Spring Cloud Config、Apollo

简单来说:注册中心管理的是服务的位置和可用性,帮助服务找到彼此;配置中心管理的是服务的配置信息,帮助服务快速获得所需的配置信息并支持实时更新。两者在 Nacos 中都可以实现,但功能和用途不同。Nacos 最常见的功能可以总结为以下几条:

服务注册与发现:Nacos 作为注册中心,帮助微服务在启动时自动注册自身,并让其他服务能够动态发现和访问它,无需硬编码服务地址。

配置管理:Nacos 提供集中化的配置管理,支持多环境配置和动态更新。开发者可以在 Nacos 中统一管理配置,并在修改配置时实时推送到应用中,无需重启服务。

服务健康检查:Nacos 会定期检查服务实例的健康状态,当某个服务实例不可用时,Nacos 会自动将其从服务列表中移除,确保流量仅导向健康的实例。

多租户和多环境支持:Nacos 支持命名空间和分组功能,可以实现不同租户或不同环境(如开发、测试、生产)的隔离管理,确保配置和服务的独立性。

可视化管理控制台:Nacos 提供一个简单易用的 Web 界面,方便查看和管理服务实例、配置项,监控服务状态,使得运维更为便捷。

流程

配置中心

1. 引入依赖

在 Spring Boot 项目的 pom.xml 中引入 Nacos 配置中心的依赖包:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.5.RELEASE</version> <!-- 使用与 Spring Boot 和 Spring Cloud 兼容的版本 -->
</dependency>

2. 增加配置

为了保证 Nacos 配置优先加载,将 Nacos 配置相关信息放入 bootstrap.propertiesbootstrap.yml 文件中。

bootstrap.properties 配置示例
# 注册中心的名字
spring.application.name=member
## 配置文件前缀(默认为 spring.application.name 的值)
#spring.cloud.nacos.config.prefix=member
## 启动环境,nacos会根据环境读不同的配置dataId:三者拼起来member-dev.properties
spring.profiles.active=dev(可设置prod在配置中心新建prod配置做多环境配置)
## nacos server地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
## 配置中心文件后缀,默认properties
spring.cloud.nacos.config.file-extension=properties
## nacos命名空间(可用来做环境隔离)
spring.cloud.nacos.config.namespace=train
# 配置分组(可选,默认为 DEFAULT_GROUP)
spring.cloud.nacos.config.group=DEFAULT_GROUP

3. 在 Nacos 中创建配置文件

  1. 登录 Nacos 控制台(默认地址为 http://localhost:8848/nacos)。

  2. 配置管理 -> 配置列表中,点击新增配置

  3. 填写配置项

    • Data ID:格式为 ${prefix}.${file-extension}(如 member-dev.properties)。

    • Group:填写为 DEFAULT_GROUP,与 bootstrap.properties 中的 group 值保持一致。

    • 配置内容:写入应用的具体配置内容,例如:

      app.message=Hello from Nacos
      app.version=1.0.0
      
  4. 点击发布,完成配置的创建。

注意:如果使用了 spring.profiles.active 指定不同的环境(如 devprod),在 Nacos 中可以创建多套配置文件,例如 my-service-dev.propertiesmy-service-prod.properties,用于不同环境的配置。


4. 加上注解读取配置

在代码中通过 @Value 注解或 @ConfigurationProperties 注解来读取 Nacos 配置的值。

使用 @Value 注入单个配置项

在 Spring Boot 项目的业务代码中,通过 @Value 注解动态读取配置项:

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("${app.message:Default Message}")
    private String message;

    @GetMapping("/message")
    public String getMessage() {
        return message;
    }
}
  • @Value("${app.message:Default Message}") 从 Nacos 配置中读取 app.message 的值,若没有找到,则使用默认值 Default Message
使用 @RefreshScope 实现配置的动态刷新

为了支持配置的动态更新,可以在类上添加 @RefreshScope 注解。这样,当 Nacos 中的配置发生变化时,Spring Cloud 会自动刷新配置到应用中。

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;

@RestController
@RefreshScope
public class ConfigController {

    @Value("${app.message:Default Message}")
    private String message;

    @GetMapping("/message")
    public String getMessage() {
        return message;
    }
}
  • @RefreshScope 注解使当前 Bean 支持配置的动态刷新。当配置在 Nacos 中发生更改时,该 Bean 中的配置值会自动更新。

总结

  1. 引入依赖:在 pom.xml 中添加 Nacos 配置中心的依赖。
  2. 增加配置:将 Nacos 相关配置放在 bootstrap.properties 中,确保在应用启动时优先加载。
  3. 创建配置:在 Nacos 控制台中新增配置文件,并写入配置内容。
  4. 加上注解:使用 @Value 注解读取配置,使用 @RefreshScope 注解实现配置的动态刷新。

注册中心配置

## nacos server注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.namespace=train

http://www.kler.cn/a/383650.html

相关文章:

  • 什么是蜂窝移动网络
  • 3.1、软件需求分析
  • 「Mac畅玩鸿蒙与硬件24」UI互动应用篇1 - 灯光控制小项目
  • Python中 yield的作用
  • NewStar CTF 2024 misc WP
  • 微服务架构面试内容整理-服务拆分的原则
  • lua入门教程 :模块和包
  • 【C++】vector 类深度解析:探索动态数组的奥秘
  • Hive面试题-- hive中查询用户连续三天登录记录的实现与解析
  • 【码农日常】Vscode Clangd初始化失败(Win10)
  • M1M2 MAC安装windows11 虚拟机的全过程
  • CSS中常见的两列布局、三列布局、百分比和多行多列布局!
  • 13.React useTimeout
  • 服务器虚拟化:现代IT基础设施的基石
  • 【660】基于SSM+Vue的在线学习系统设计与实现
  • 数据库_SQLite3
  • 防止事件冒泡和防止触发子元素
  • Oracle视频基础1.4.4练习
  • python数据结构基础(6)
  • elementui中的新增弹窗在新增数据成功后再新增 发现数据无法清除解决方法
  • 一元二次函数的最值公式
  • EV录屏好用吗?盘点2024年10款专业好用的录屏软件。
  • 【wxWidgets GUI设计教程 - 高级布局与窗口管理】
  • 【大模型系列】Video-XL(2024.10)
  • php rides限制访问频率
  • uniapp学习(010-2 实现抖音小程序上线)