Nacos使用

Nacos简介

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos主要特性:

  • 服务发现和服务健康检测。

  • 动态配置服务。

  • 动态DNS服务。

  • 服务及其元数据管理。

Loading

安装Nacos

  1. 安装包安装
  • Nacos 依赖 Java 环境来运行,所以,需要确保你的机器上已经安装好了 JDK 1.8+ 版本。

  • 浏览器访问地址:https://nacos.io/download/release-history/ ,找到 2.2.3 版本,点击并下载对应版本的安装包:

  • 下载完成后,解压到某个文件夹下,然后进入 /bin 目录下,打开终端:

  • 在终端中,运行如下启动命令 ( standalone 代表着单机模式运行,非集群模式) :

./startup.cmd -m standalone

  1. Docker安装Nacos
  • 在拉取 Nacos 镜像之前,在 E:\docker 文件夹下,创建一个 /nacos 文件夹,等会运行容器时,用于将 Nacos 容器中的配置文件、持久化文件挂载出来,防止容器重启时数据丢失的问题。

  • 那么,下载 2.2.3 版本的 Nacos 镜像,运行命令如下:

docker pull nacos/nacos-server:v2.2.3

  • 执行完成后,执行如下命令,查看本地已下载的镜像列表,确认一下镜像是否下载成功了:

docker images

  • 镜像下载成功后,运行如下命令,运行一个 Nacos 容器:

docker run -d --name nacos --env MODE=standalone -p 8848:8848 -p 9848:9848 nacos/nacos-server:v2.2.3

  • 命令执行完毕后,通过 docker ps 命令查看一下正在运行中的 Docker 容器,确认一下容器是否正常跑起来了。

  • 浏览器访问地址:http://localhost:8848/nacos ,即可进入到 Nacos 的控制后台。

  • Nacos 容器跑起来后,我们将容器中的配置文件,以及数据文件复制到宿主机中。

docker cp nacos:/home/nacos/conf E:\docker\nacos

docker cp nacos:/home/nacos/data E:\docker\nacos

  • 最后,执行如下命令,强制删除正在运行中的 Nacos 容器:

docker rm -f nacos

  • 重新跑一个正式的 Nacos 容器,运行命令如下:

docker run -d --name nacos --privileged -e MODE=standalone -e JVM_XMX=300m -e JVM_XMS=300m -p 8848:8848 -p 9848:9848 -v E:\docker\nacos\conf:/home/nacos/conf -v E:\docker\nacos\data:/home/nacos/data -v E:\docker\nacos\logs:/home/nacos/logs nacos/nacos-server:v2.2.3

整合 Nacos 配置中心:实现动态配置刷新

什么是配置中心?

在微服务架构下,配置中心是一个专门用来集中管理和分发配置的服务。它通过提供统一的接口,帮助开发人员将所有微服务的配置项集中存储、管理和分发,确保微服务在不同环境下(如开发、测试、生产环境)能够方便地获取到对应的配置。

为什么需要配置中心?

  1. 集中管理,简化运维: 在传统的单体应用中,配置项通常存储在本地文件中,管理和维护相对简单。但在微服务架构下,配置项分散在多个服务中,如果每个服务都单独管理自己的配置项,会导致管理复杂性增加。配置中心通过集中管理配置项,极大简化了运维工作。

  2. 环境隔离,配置灵活: 不同的环境(开发、测试、生产等)通常需要不同的配置项。配置中心支持按环境隔离配置项,使得相同的微服务在不同环境中可以方便地获取对应的配置,而无需手动修改配置文件。

  3. 动态更新,实时生效: 在业务需求变化较快的场景中,配置项的频繁修改是常态。配置中心支持配置项的动态更新和实时生效,减少了服务重启的次数,提高了系统的可用性和灵活性。

  4. 安全管理: 某些敏感配置项(如数据库密码、API 密钥等)不适合写在代码中或本地文件中。配置中心提供了安全的存储和访问机制,确保敏感信息的安全性。

  5. 统一监控,提升稳定性: 配置中心可以对所有配置项进行统一监控和管理,方便运维人员及时发现和处理配置问题,提升系统的稳定性和可靠性。

使用Nacos配置中心

进入 Nacos 管理后台,创建配置

浏览器访问: http://localhost:8848/nacos , 进入到 Nacos 控制台,点击创建配置按钮。

填写相关配置项:

①:Data Id : 配置的唯一标识,这里我们填写;

②:Group: 所属组,这里默认组即可;

③:配置格式:项目中使用的 YAML 格式配置, 这里也选择 YAML;

④:配置内容,将限流阈值配置复制进去;

⑤:点击发布按钮;

Loading

添加依赖

1
2
3
4
5
6
<!-- Nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.3.0-RC</version>
</dependency>

注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。我们是 Spring Boot 3.x, 故使用最新的 0.3.x 版本。

项目配置Nacos

依赖添加完毕后,编辑 applicaiton.yml 文件,准备添加 Nacos 相关配置:

1
2
3
4
5
6
7
8
9
10
11
12
nacos: 
config: # Nacos 配置中心
access-key: # 身份验证
secret-key: # 身份验证
data-id: xxx # 指定要加载的配置数据的 Data Id
group: DEFAULT_GROUP # 指定配置数据所属的组
type: yaml # 指定配置数据的格式
server-addr: http://127.0.0.1:8848/ # 指定 Nacos 配置中心的服务器地址
auto-refresh: true # 是否自动刷新配置
remote-first: true # 是否优先使用远程配置
bootstrap:
enable: true # 启动时,预热配置

Nacos配置中心:动态加载Bean

当系统发送异常时,需要给开发发送告警信息,提示开发速度修复系统问题。告警的形式可以是发送短信,也可以是发送邮件。至于具体使用哪种方式, 支持通过修改 Nacos 配置中心中的配置项来动态控制。

自定义配置

编辑 application.yml 文件,自定义一个告警类型的配置:
sms : 表示短信告警;
mail : 表示邮件告警;

添加Nacos配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
spring:
application:
name: xxx # 应用名称
profiles:
active: dev # 默认激活 dev 本地开发环境
cloud:
nacos:
config:
server-addr: http://127.0.0.1:8848 # 指定 Nacos 配置中心的服务器地址
prefix: ${spring.application.name} # 配置 Data Id 前缀,这里使用应用名称作为前缀
group: DEFAULT_GROUP # 所属组
namespace: public # 命名空间
file-extension: yaml # 配置文件格式
refresh-enabled: true # 是否开启动态刷新

使用@RefreshScope 注解
这个注解是干嘛的?

@RefreshScope 注解是 Spring Cloud 提供的一个注解,用于实现配置动态刷新功能。当配置中心的配置发生变化时,标注了 @RefreshScope 的 Bean 会重新加载最新的配置,而无需重启应用。

在 Nacos 配置中心的场景下,@RefreshScope 的主要功能包括:

  • 动态刷新配置:当 Nacos 配置中心的配置发生变化时,应用中的配置会自动更新,避免了手动重启应用的繁琐过程。

  • 重新加载 Bean:标注了 @RefreshScope 的 Bean 会在配置变化后重新加载,确保 Bean 使用最新的配置。

  • 与 Spring Cloud 集成:@RefreshScope 与 Spring Cloud 的配置管理机制紧密集成,能够无缝地处理配置更新事件。

Nacos命名空间应用:项目隔离

命名空间(Namespace)是 Nacos 提供的一种逻辑隔离手段,用于对配置和服务进行分组和隔离。在 Nacos 中,命名空间通常被用于做业务隔离。

什么是业务隔离?
不同业务线的配置和服务可以放在不同的命名空间中,方便管理和维护。

创建命名空间

进入到 Nacos 管理后台:http://localhost:8848/nacos :点击命名空间菜单,点击新建命名空间按钮:

填写命名空间相关配置项,如下图所示:

①:命名空间 ID: 可不填,不填的话,会自动生成一长串的唯一 ID , 这里为了方便识别,手动填写;

②:命名空间名称:也可以写中文,这里填项目的拼音;

③:描述:命名空间描述性文字;

Loading

克隆配置

创建完成后,进入到配置管理 | 配置列表,在上方会发现除了 public 外,多出了一个咱们刚刚创建的 xxx 命名空间,选择该命名空间,会发现该命名空间下,还没有任何配置:
将 public 命名空间下的所有配置勾选,点击克隆,选择目标空间 | 开始克隆 , 即可将 public 空间下的配置,一键复制到 xxx 命名空间下:
Loading

服务注册:将认证服务注册到 Nacos 上

在微服务架构中,服务注册是一种机制,用于将服务实例的信息(如地址、端口、健康状态等)注册到服务注册中心。服务实例启动时,会向注册中心登记自己的信息,停止时则注销。

它的作用如下:

  • 提供服务元数据:注册中心保存了所有服务实例的元数据,供其他服务或负载均衡器查询。

  • 健康检查:注册中心通常会定期检查注册的服务实例的健康状况,以确保它们可用并将不可用的实例从注册列表中移除。

添加依赖:

1
2
3
4
5
<!-- 服务注册发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

添加配置

1
2
3
4
5
6
7
8
9
10
11
spring:
// 省略 ...
cloud:
nacos:
config:
// 省略...
discovery:
enabled: true # 启用服务发现
group: DEFAULT_GROUP # 所属组
namespace: xxx# 命名空间
server-addr: 127.0.0.1:8848 # 指定 Nacos 配置中心的服务器地址

Nacos使用
http://bloomivy.github.io/2025/01/22/Nacos使用/
作者
Bloom
发布于
2025年1月22日
许可协议