概念:
Nacos(全称为“Dynamic Naming and Configuration Service”)是一个用于服务发现、配置管理和动态 DNS 服务的开源平台。作为一个服务注册中心,Nacos 提供了服务注册和发现的功能,使得微服务可以自动识别和连接到其他微服务,并支持多种语言的使用。除此之外,它还提供了强大的配置管理、动态 DNS 解析和流量管理等功能。
一、Nacos注册中心:
什么是注册中心?
注册中心是一种服务治理方式,它用于服务注册和发现,以实现服务之间的协作和通信。注册中心也是微服务架构中的重要组成部分,它可以提供服务的注册、发现、添加、删除等功能,同时还能为服务提供负载均衡、路由等路由管理的功能。注册中心的实现方式有很多种,比如:Zookeeper、Eureka、Consul、Nacos等。
注册中心功能:
微服务中所有项目都必须注册到注册中心才能成为微服务的一部分
注册中心和企业中的人力资源管理部门有相似
当前微服务项目中所有的模块,在启动前,必须添加注册到Nacos的配置
所谓注册,就是将自己的信息,提交到Nacos来保存
如下:
Nacos的下载
https://github.com/alibaba/nacos/releases/download/1.4.3/nacos-server-1.4.3.zip
Nacos的启动
因为Nacos是java开发的
我们要启动Nacos必须保证当前系统配置了java环境变量
简单来说就是要环境变量中,有JAVA_HOME的配置,指向安装jdk的路径
确定了支持java后,就可以启动Nacos了
mac系统同学一定要到http://doc.canglaoshi.org/查看homebrew相关知识
mac系统安装Nacos推荐
mac系统如何安装nacos(window系统通用)?详细教程一文解决_mac 安装nacos_程序猿七度的博客-CSDN博客
windows的同学保证java环境变量正常后
将nacos-server-1.4.2.zip压缩包解压
双击打开解压得到的文件夹后,再双击打开其中的bin目录
cmd结尾的文件是windows版本的
sh结尾的文件是linux和mac版本的
startup是启动文件,shutdown是停止文件
Windows下启动Nacos不能直接双击cmd文件
需要在dos窗口运行
在当前资源管理器地址栏输入cmd
E:\five\nacos-server-1.4.2\nacos\bin>startup.cmd -m standalone
startup.cmd:windows启动nacos的命令文件
-m 表示要设置启动参数
standalone:翻译为标准的孤独的,意思是正常的使用单机模式启动
运行成功默认占用8848端口,并且在代码中提示
如果不输入standalone运行会失败
如果报了
"please set JAVA_HOME......."
表示当前项目没有配置java环境变量(主要是没有设置JAVA_HOME)
如果运行没有报错
打开浏览器输入地址
如果是首次访问,会出现这个界面
登录系统
用户名:nacos
密码:nacos
登录之后可以进入后台列表
不能关闭启动nacos的dos窗口
我们要让我们编写的项目注册到Nacos,才能真正是微服务项目
将项目注册到Nacos
我们已经讲过,一个项目要想成为微服务项目体系的一部分
必须将当前项目的信息注册到Nacos
我们要添加一些配置,实现business模块启动时注册到Nacos的效果
首先business模块pom文件中添加依赖
<!-- 支持项目注册到Nacos注册中心的依赖
discovery:发现
(当前项目注册后,微服务系统中,就能发现该项目)
-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
我们在创建好的application-dev.yml中编写对nacos注册的配置信息
spring:
application:
# 设置当前项目的名称,这个名字会提交给Nacos做当前微服务项目的名称
name: nacos-business
cloud:
nacos:
discovery:
# 配置Nacos的位置,用于提交当前项目信息
server-addr: localhost:8848
按照学习Nacos时的方式,启动一下nacos
启动之后,
重启business模块,如果启动也正常,就应该将当前项目的信息提交给Nacos
在Nacos的服务管理->服务列表中,能看到nacos-business的名称
Nacos心跳机制
心跳:周期性的操作,来表示自己是健康可用的机制
注册到Nacos的微服务项目(模块)都是会遵循这个心跳机制的
心跳机制的目的
1.是表示当前微服务模块运行状态正常的手段
2.是表示当前微服务模块和Nacos保持沟通和交换信息的机制
默认情况下,服务启动开始每隔5秒会向Nacos发送一个"心跳包",这个心跳包中包含了当前服务的基本信息
Nacos接收到这个心跳包,首先检查当前服务在不在注册列表中,如果不在,按新服务的业务进行注册,如果在,表示当前这个服务是健康状态
如果一个服务连续3次心跳(默认15秒)没有和Nacos进行信息的交互,就会将当前服务标记为不健康的状态
如果一个服务连续6次心跳(默认30秒)没有和Nacos进行信息的交互,Nacos会将这个服务从注册列表中剔除
这些时间都是可以通过配置修改的
实例类型分类
实际上Nacos的服务类型还有分类
- 临时实例(默认)
- 持久化实例(永久实例)
默认每个服务都是临时实例
如果想标记一个服务为永久实例
cloud:
nacos:
discovery:
# ephemeral设置当前项目启动时注册到nacos的类型 true(默认):临时实例 false:永久实例
ephemeral: false
持久化实例启动时向nacos注册,nacos会对这个实例进行持久化处理
心跳包的规则和临时实例一致,只是不会将该服务从列表中剔除
一般情况下,我们创建的服务都是临时实例
只有项目的主干业务才会设置为永久实例
二、Nacos配置中心
什么是配置中心?
配置中心是一种用于统一配置管理的组件,它被用于微服务架构中,用于管理微服务的配置文件,以确保各微服务节点获取相同的配置。配置中心可以让开发人员更方便地管理不同环境下的配置,利用配置中心可以快速切换不同环境下的配置,加快发布速度。一些著名的配置中心有Apollo、Spring Cloud Config、Nacos等。
配置中心功能:
在微服务的环境下,将项目需要的配置信息保存在配置中心,需要读取时直接从配置中心读取,方便配置管理的微服务工具
我们可以将部分yml文件的内容保存在配置中心
一个微服务项目有很多子模块,这些子模块可能在不同的服务器上,如果有一些统一的修改,我们要逐一修改这些子模块的配置,由于它们是不同的服务器,所以修改起来很麻烦
如果将这些子模块的配置集中在一个服务器上,我们修改这个服务器的配置信息,就可以修改所有子模块的信息,这个服务器就是配置中心
使用配置中心的原因就是能够达到高效的修改各模块配置的目的
配置中心的使用
Nacos既可以做注册中心,也可以做配置中心
Nacos做配置中心,支持各种格式\类型的配置文件
properties\yaml(yml)\txt\json\xml等
Nacos数据结构
namespace:命名空间
group:分组
Service/DataId:具体数据
命名空间
namespace是Nacos提供的最大的数据结构
一个Nacos可以创建多个命名空间(namespace)
一个命名空间(namespace)能够包含多个group
每一个group中又可以包含多条配置信息
在nacos中新建命名空间
在上图连接的位置可以新增命名空间,填写命名空间名称和描述即可
Nacos有默认的命名空间public不能删除和修改
添加命名空间后,我们在Nacos中注册的服务或添加的配置就可以指定命名空间了
因为多个命名空间可以隔离项目,每个项目使用自己的命名空间,互不干扰
服务或配置
确定了命名空间和分组之后
我们就可以添加服务或配置了
之前我们启动的各种模块都是服务,这些服务都是默认保存在public命名空间中
下面我们主要使用配置中心的功能,在命名空间中添加配置
添加配置就是设置DataId
实际在Nacos中定位一个配置的结构为
Namespace>Group>DataId
Nacos添加配置
完成cart模块的数据库配置信息添加到nacos的操作
启动nacos(建议使用本地nacos,删除配置列表中所有配置信息,再进行添加)
Nacos首页->配置管理->配置列表->添加配置(右侧的大"+"号)
添加cart模块数据库连接配置
我们删除了cart模块原有的连接数据库信息的配置
下面开始,我们尝试连接nacos配置中心,读取数据库配置信息,令cart模块仍然能够正常连接数据库
项目读取配置
csmall-cart-webapi模块要读取连接数据库的配置
如果要读取配置中心的信息,首先要添加依赖
<!-- Nacos配置中心依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 支持SpringCloud项目读取系统配置的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
如果当前我们使用的SpringCloud版本不是2020.x以后的版本
那么上面添加的依赖会有不一样的情况,要想去了解就要查阅相关资料
像其他程序一样,在添加完依赖之后,还需要添加yml文件的配置
借此机会讲解一下SpringCloud项目的配置文件加载顺序
我们学习过的配置文件大体有application.properties和application.yml两种配置文件添加配置
这两个文件如果同时存在,他们的配置都可以同时生效
但是如果两个文件配置有冲突(对同一个属性配置两次)
那么就要看加载顺序了
-
先加载application.yml
-
后加载application.properties
如果两个配置文件同时设置了同一个属性,后加载的覆盖掉先加载的
在添加上面的pom文件依赖之后,SpringCloud项目就又多了一组配置文件
它们是bootstrap.yml和bootstrap.properties
这组配置文件是SpringCloud项目才能使用的
它的作用是实际开发时,主要配置系统内容,一般都是不轻易修改的
所以这组配置文件的加载时机,整体早于application这一组
一个SpringCloud项目加载配置文件的顺序最终可能如下图
因为配置文件的特性,bootstrap这一组是加载系统配置的
所以我们读取配置中心的配置信息,最好添加在bootstrap.yml\properties中
下面我们就在cart-webapi项目中resources文件夹中添加bootstarp.yml文件
spring:
cloud:
nacos:
config:
# 设置配置中心的ip和端口
server-addr: localhost:8848
# namespace: public 可以省略的
# group: DEFAULT_GROUP 可以省略
# 指定要读取的配置文件的后缀名
file-extension: yaml
# 配置中心读取配置信息的约定:
# 会自动读取[当前项目注册到Nacos的名称].[后缀名]的配置信息
# 这样就能确定命名空间,分组名称和配置名称了
# 例如当前项目的名称为nacos-cart上面配置的后缀名是yaml,这样就会读取nacos-cart.yaml的配置信息
如果一切顺利,那么cart模块是可以通过knife4j测试操作连接数据库的
我们可以新增购物车信息,或删除购物车信息后检查数据库是否有对应操作
因为我们已经删除了本地yml文件中数据库的配置,所以,它能连接操作数据库一定是配置中心生效了。