介绍
- Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
- 相对于 Spring Cloud Eureka 来说,Nacos 更强大。Nacos = Spring Cloud Eureka + Spring Cloud Config
- Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config
- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。
- 如果微服务架构中没有使用统一配置中心时,所存在的问题:
- 配置文件分散在各个项目里,不方便维护
- 配置内容安全与权限
- 更新配置后,项目需要重启
nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启、回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动。
Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。
Nacos主要提供以下四大功能:
- 服务发现和服务健康监测
- 动态配置服务
- 动态DNS服务
- 服务及其元数据管理
官方文档
请先通过官方文档快速安装nacos
快速开始
1.启动 nacos
bin文件夹中启动
startup.cmd -m standalone windows
./startup.sh -m standalone linux
sh startup.sh -m standalone linux
- 默认本地启动地址:http://localhost:8848/nacos
- 默认用户名和密码都是 nacos
2.作注册中心
服务注册
引入依赖
<!--
SpringCloud Alibaba环境指定:
SpringBoot环境:2.3.12.RELEASE
SpringCloud环境:Hoxton.SR12
SpringCloud Alibaba环境:2.2.7.RELEASE
-->
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
配置文件 application.yml
server:
port: 8081
spring:
application:
name: nacos-provider # 服务名
cloud:
nacos:
discovery:
# nacos服务地址
server-addr: localhost:8848/
启动类加上注解 @EnableDiscoveryClient
正常的话就可以在 nacos上看到此服务了
3.作配置中心
加载 nacos上配置文件
引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
配置文件 bootstrap.yml
- 系统级别的配置文件,优先级要高于application.yml,先加载
- 通常系统级别的配置文件,加载一些需要优先加载的配置信息,比如:配置中心的内容
spring:
cloud:
nacos:
config:
# nacos服务地址(记得先在 nacos上创建配置文件)
server-addr: localhost:8848
# 账号、密码
# username: nacos
# password: nacos
# 命名空间ID,默认public
# namespace: public
# 加载配置文件信息
prefix: application-test
# 配置文件默认扩展名,默认Properties
file-extension: yaml
# 实时更新配置文件,默认true
refresh-enabled: true
# 配置文件组,默认DEFAULT_GROUP,可以针对业务进行分组,如订单模块,库存模块等
group: DEFAULT_GROUP
# 加载多个配置文件,类似Maven的拆分和聚合操作
profiles:
active: dev #dev、test、prod 三种配置可以在这里进行一键切换,默认激活 dev(开发)环境配置
在 nacos上创建文件 application-test.yml
server:
port: 8088
spring:
application:
name: nacos-gateway
cloud:
nacos:
discovery:
# 加载Nacos注册中心地址
server-addr: localhost:8848
gateway:
routes:
- id: toConsumer
predicates:
- Path=/consumer/**
uri: lb://006-nacos-consumer
- id: toBaidu
predicates:
- Path=/
uri: https://www.baidu.com
- id: toBaiduNews
predicates:
- Path=/, /guonei, /guoji
uri: https://news.baidu.com/
@RefreshScope
控制器 controller加上注解,则修改 Nacos配置中心的配置信息后,客户端也能实时获取到配置信息
配置文件的拆分和聚合
可以把以上 application-test.yml 拆分成几个 yaml文件,再通过 bootstrap 配置聚合
请先分别在 nacos创建以下5个配置文件,并把上述 application-test.yml 拆分到这几个文件中
spring:
cloud:
nacos:
config:
# 加载Nacos配置中心地址
server-addr: localhost:8848
# 加载配置信息的命名空间
namespace: 8600ea68-008b-4d9e-8d50-d78b4b4803a0
# 把上面的yaml文件在nacos中拆分成多个配置文件
# 同时加载多个配置文件,系统会自动聚合在一起
extension-configs:
- dataId: application-base.yaml
group: base
refresh: true
- dataId: application-server.yaml
group: SERVER
refresh: true
- dataId: application-spring.yaml
group: spring
refresh: true
- dataId: application-nacos.yaml
group: nacos
refresh: true
- dataId: application-gateway.yaml
group: gateway
refresh: true
扩展:持久化操作
- 找到nacos/conf目录中的application.properties
spring.datasource.platform=mysql #持久化平台
db.num=1 # 存储节点数量
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos #数据库用户名
db.password.0=nacos #数据库密码
- mysql创建数据库和表结构
- 要求Mysql的版本必须为 5.7+
- nacos/conf目录下nacos-mysql.sql
- 将这个文件创建到数据库中,生成表结构,重启启动Nacos即可