1.Nacos(Dynamic Naming and Configuration Service):是个易于构建云原生应用的动态服务发现、配置管理和服务管理平台
2.Nacos 致力于发现、配置和管理微服务,快速实现动态服务发现、服务配置、服务元数据及流量管理
3.服务(Service)是 Nacos 世界的一等公民,支持几乎所有主流类型“服务”的发现、配置和管理、其中包括:
4.Github项目: https://github.com/alibaba/nacos
5.官方站点:https://nacos.io/zh-cn/
1.服务发现和服务健康监测:nacos作为服务注册中心可用于服务发现,并支持传输层(TCP)和应用层(HTTP)的健康检查,并提供了agent上报和nacos server端主动探测两种模式,另外还有统一的Dash Board。
2.动态配置中心:nacos可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置,消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷
3.动态 DNS 服务:nacos支持内网的简单DNS解析服务,以及以 DNS 协议为基础的服务发现
4.服务及其元数据管理:nacos能管理数据中心的所有服务及元数据,包括:服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务SLA 以及 metrics 统计数据
1.架构图
2.数据模型
Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。
2.1名词解释
Namespace:命名空间,公共的命名空间师public
Group:分组,默认分组是DEFAULT_GROUP
Service:服务名称
DataId:配置文件名称
1.下载地址:https://github.com/alibaba/nacos/releases/tag/2.2.2
2.上传到自己的服务器中需要开放如下端口:8848,9848,9849
3.解压:tar zxvf nacos-server-2.2.2.tar.gz
4.在mysql中创建一个名为nacos的库,并且将nacos提供的sql进行执行
sql执行后应该有如下表
5.配置mysql的信息,配置文件信息在conf目录下的application.properties中
6.在application.properties开启授权
7.设置密钥为:SecretKey012345678901234567890123456789012345678901234567890123456789
8.设置请求名称
9.设置好后进行保存
10.进入nacos/bin目录进行启动
nacos默认为集群启动,所我在启动时需要加参数
启动命令:sh startup.sh -m standalone
如果想用sh startup.sh直接启动单机版,将cluster改为standalone后即可
11访问页面:
1.参考官方文档:https://nacos.io/zh-cn/docs/v2/ecology/use-nacos-with-spring-cloud.html
2.版本说明文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
3.博主采用的版本为下图红色标出
springboot2.6.13这个版本中nacos注册不上去,博主还在研究源码ing
4.创建工程Andy-parent, Andy-api,Andy-driver,Andy-order
Andy-parent:为父工程
Andy-api:为公公共模块
Andy-driver:司机模块
Andy-order:订单模块
5.在Andy-paren工程添加如下坐标
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.6.11version>
parent>
<properties>
<spring.cloud.version>2021.0.4spring.cloud.version>
<spring.cloud.alibaba.version>2021.0.4.0spring.cloud.alibaba.version>
properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring.cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>${spring.cloud.alibaba.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
6.在Andy-api工程添加如下坐标
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-bootstrapartifactId>
dependency>
7.在Andy-driver,Andy-order分别创建bootstrap.yml文件,并且添加如下配置
server:
port: 18081 # tomcat端口
spring:
application:
name: Andy-driver #服务名称
cloud:
bootstrap:
enabled: true #开启bootstrap加载
nacos:
discovery:
server-addr: 192.168.44.128:8848 #nacos地址
namespace: e466f8d6-6abd-4037-b3c4-add3ec61d003 #nacos命名空间
username: nacos #nacos用户名
password: nacos #nacos密码
server:
port: 18082 # tomcat端口
spring:
application:
name: Andy-order #服务名称
cloud:
bootstrap:
enabled: true #开启bootstrap加载
nacos:
discovery:
server-addr: 192.168.44.128:8848 #nacos地址
namespace: e466f8d6-6abd-4037-b3c4-add3ec61d003 #nacos命名空间
username: nacos #nacos密码
password: nacos #nacos密码
7.在Andy-driver工程,Andy-order工程的启动类上加上@EnableDiscoveryClient注解
8.启动后我们可以看见nacos中有如下两个服务
1.在Andy-api模块中添加如下坐标
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
2.分别在Andy-driver工程下的bootstrap.yml文件添加如下配置
spring:
cloud:
nacos:
config:
server-addr: 192.168.44.128:8848 #nacos地址
namespace: e466f8d6-6abd-4037-b3c4-add3ec61d003 #nacos命名空间
username: nacos #nacos密码
password: nacos #nacos密码
3.在nacos中创建配置
dataId组成部分为:${prefix}-${spring.profiles.active}.${file-extension}
5.多环境配置
spring:
profiles:
active: dev
6.启动项目,没报错就成功了
1.外部配置中心配置项发生变化时,应用端在无需重启应用的情况下能自动同步最新配置数据。
3.@ConfigurationProperties 热更新
2.将cluster.conf.example名称改为cluster.conf
3.修改配置为主机ip+端口号
4.将修改的文件保存,并且将整个nacos同步到集群主机上
5.进入nacao/bin 用sh startup.sh命令启动
6.访问主机,如果没有报错就成功了
1.在NacosServer中,服务和配置是一等公民,而在Server侧服务信息的存储采用的是分级存储模型
1.nacos默认的实例类型是临时实例,可以更改
2.临时实例的应用场景大多都是上层的服务,比如:SpringCloud服务,dubbo服务等
3.持久实例的应用场景是⼀些基础的组件,例如:数据库,缓存等【想以服务的形式对外提供】
4.临时实例和持久实例在健康检查上的方式不一样:临时实例使用客户端上报模式【心跳】,持久化实例使用服务端反向探测模式
3.Nacos中的健康检测
1.Nacos是⼀个需要存储数据的⼀个组件,故在集群模式下,就需要考虑如何保障各个节点之间的数据⼀致性以及数据同步,那就不得不引入共识算法来保障各个节点之间的数据的⼀致性
2.Nacos使用了哪种类型的一致性协议?
3.Nacos选择了什么协议?
4.Distro协议的主要设计思想
5.几个场景进行Distro协议工作原理的介绍
数据初始化:新加入的Distro节点会进行全量数据拉取。具体操作是轮询所有的Distro节点,通过向其他的机器发送请求拉取全量数据
数据校验
写操作
Distro协议总结