概述
Nacos:Dynamic Naming and Configuration Service
Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos生态图,来自于官网
Nacos地图,来自于官网
Nacos就是注册中心+配置中心的组合,等价于Eureka+Config+Bus的组合
Nacos支持CP或者AP,可以进行切换
Nacos安装并运行
- 运行
解压之后的文件夹
进入bin目录下,运行startup.sh
sh startup.sh -m standalone代表单机运行模式,默认的话是集群运行模式
- 通过页面进行访问
查看start.out日志中的启动信息
访问,默认用户名密码为nacos,在配置文件中可以进行修改
父工程创建
父工程只做公共依赖管理

Nacos服务发现
- Nacos Discovery integrate with the Netflix Ribbon, RestTemplate or OpenFeign can be used for service-to-service calls.
服务提供者模块
- 创建Module

修改pom文件
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies>
- 编写配置文件

- 主启动类

- 业务类

- 测试

- 页面查看Nacos
对服务因为提供了很多操作
详情
- 为了演示负载均衡,再创建一个一样的模块,端口号为9002


服务消费者模块
- 创建Module

修改pom文件
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies>
- 修改配置文件

- 主程序

- 业务类
Nacos底层依赖Ribbon,可以通过Ribbon来实现负载均衡,并通过RestTemplate来实现服务的调用
- 测试
具备负载均衡能力
- Nacos注册中心

Nacos配置管理
- Use Spring Cloud Alibaba Nacos Config to quickly access Nacos configuration management capabilities based on Spring Cloud’s programming model.
- Nacos作为配置中心,可以替代SpringCloud Config + Bus的实现,甚至更加优秀,了可以实现自动动态刷新,而不需要手动请求去刷新
- 基础配置演示的是作为一个集中式配置中心的使用方式,通过切换profile来实现从配置中心读取不同的配置
- 分类配置可以配合权限控制功能实现更加精细的对于不同用户和环境的隔离
基础配置
- 创建Module

修改pom文件
<dependencies><!-- 服务发现依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- 配置中心依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency></dependencies>
- 配置文件
在项目初始化时,要保证先从配置中心进行配置拉取(bootstrap.yaml),拉取配置之后,才能保证项目的正常启动。
springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
bootstrap.yaml中配置Nacos Server的地址和应用名(作为配置文件名的组成部分)
目前配置文件的类型只支持yaml和properties
application.yaml
bootstrap.yaml结合application.yaml表明项目启动后会从配置中心加载名为
nacos-config-dev.yaml的配置文件由于,配置中心配置的文件名也就确认了
也即Data Id:
- 主启动类

- 业务类
通过 Spring Cloud 原生注解
@RefreshScope实现配置自动更新
- 自动刷新测试
配置中心配置文件未修改之前
修改配置中心的配置文件
直接在浏览器请求,甚至不用手动发送请求更新
- 切换不同配置测试
演示不同的配置集切换
新建Data ID为
nacos-config-test.yaml的配置文件
在application.yaml切换环境
分类配置
- 命名空间

默认为public
- Group分组

默认为DEFAULT_GROUP
- Data ID

深入理解Nacos分类配置可以参考LarsCheng’s Blog Nacos(六):多环境下如何“管理”及“隔离”配置和服务
- 单个用户
对于Nacos单个用户而言,NameSpace就可以用做环境的区分,可以不使用分组的概念,根据配置文件的,在不同环境中,添加不同的配置集来实现不同服务的配置
- 单个用户
当然还可以使用Group再细分,在服务的基础上再按照Group分组
- 多个用户
NameSpace可以用做用户之间的隔离,需要配合权限控制
而对每一个NameSpace而言,又可以像单个用户那样借助Group实现对不同环境的管理
当业务规模更大的时候,可以借助Group来隔离不同的项目
- NameSpace和Group可以灵活搭配进行隔离的操作。
在bootstrap.yaml中通过NameSpace、Group和DataID可以唯一执行Nacos中的配置文件
Nacos集群
- 集群模式架构文档

- 持久化问题
在之前单机版重启Nacos之后,我们发现我们的配置并未消失
因为Nacos默认自带内置数据源进行存储。
但是每一个Nacos都使用自带数据源有个问题,数据如何保证一致性?
一致性保证
- 采用外置数据源,可以使用MySQL,然后集群中所有的Nacos都使用同一个MySQL来实现数据的一致性保证。
Nacos持久化配置
Nacos默认自带的是嵌入式数据库derby
derby切换到Nacos

- 执行sql文件
直接执行conf目录下的
nacos-mysql.sql
- 修改conf目录下的application.properties配置

修改为我们自己的MySQL
单机模式启动
成功启动
Nacos集群搭建
- Nacos配置
在之前持久化配置的基础之上,修改conf目录下的cluster.conf文件
cluster.conf文件记录的是集群的IP和端口号,表示哪些Nacos实例组成一个集群
格式为ip:端口号





































