一 Nacos 的介绍
Nacos 是阿里巴巴2018年 7 月退出的一个开源项目,是一个更容易于构建云原生应用的动态服务注册与发现、配置管理和配置管理平台;(Nacos :纳克斯)
Nacos 致力于快速实现动态服务注册与发现、服务配置、服务元数据及流量管理;
Nacos 属于 Spring Cloud Alibaba 下的一个组件;
Nacos 约等于 Spring Cloud Eureka (注册中心) + Spring Cloud Config (配置中心)
Nacos官网:https://nacos.io/
1.1 Nacos服务端的目录
bin 目录 : 存放启动脚本和关闭脚本
conf 目录 :存放配置文件
target 目录 :里面存放一个jar ,这个jar里面存放这个整体的服务源码已经所需要的依赖,这是一个springboot程序
1.2 Nacos 运行环境部署
1、下载nacos最新的二进制压缩包;
下载地址:Releases · alibaba/nacos · GitHub
2、解压下载下来的nacos最新的二进制压缩包;
tar -zxvf nacos-server-1.3.1.tar.gz
cd nacos/bin
3、启动nacos server
./startup.sh -m standalone
注:单机环境必须带-m standalone参数启动,否则无法启动,不带参数启动的是集群环境;
4、启动日志:/usr/local/nacos/logs/start.out
5、访问:http://xxxxx:8848/nacos默认用户名密码:nacos/nacos
二、Nacos注册中心
和Dubbo 类似 ,微服务开发时 Controller 调用 Controller ,调用者是服务消费者 ,被调用者是服务提供者 ,服务消费者和服务提供者时相对概念,服务消费者也可以被另一个服务调用,那么此时的服务消费者也是一个服务提供者;在实际开发中,我们会把所有的服务都注册到nacos注册中心上,那么nacos去维护和管理我们的所有服务;
通过添加一个starter 依赖:spring-cloud-starter-alibaba-nacos-discovery 它通过自动配置、注解以及SpringBoot 编程模式与Nacos 无缝集成,实现服务注册与发现,nacos经过双十一考验,可以在生成环境中作为大规模分布式系统的服务注册中心;
2.1 服务 EndPoint 端点
每一个采用 Spring-cloud-starter-alibaba-nacos-discovery 实现的服务都提供了一个EndPoint,EndPoint 的访问地址为 :
http://ip:port/actuator/nacosdiscovery
http://localhost:8120/actuator/nacosdiscovery
EndPoint 主要提供了两类信息:
1、subscribe:显示了当前有哪些服务订阅这;
2、NacosDiscoveryProperites:显示当前服务实例关于 Nacos 的基础配置 ;
2.2 Nacos 客户端缓存机制
新版本的改了
基本上大多数的 注册中心都是有缓存机制的,就是在服务器宕机后,也是也是可以进行远程调用访问的。
比如 zookeeper 、eureka 、都是有缓存的 Nacos 也是缓存
缓存的就是 也就是将ip+端口缓存到内存了
但是前提是必须要在调用一次之后才会有缓存,就会保存 discovery 项目 的ribbon包下的 NacosServer 里面的 metadata里面去
有了缓存就不用在访问注册中心了,这样减少注册中心的压力
jps 可以查看当前的 java服务进程
jps 可以查看当前的 java服务进程 已经服务包名
netstat -nlpt 查看端口信息
三、Nacos的配置中心
Nacos 提供用于存储配置和其他元数据功能,为分布式系统中的外部化配置提供服务器端和客户端支持,使用 Spring Cloud Alibaba Nacos Config 就可以在Nacos Server 集中管理 Spring Cloud 应用的外部数据配置 ;
Spring Cloud Alibaba Nacos Config 是在启动的boostrap 阶段,将配置加载到Spring 环境中;
Spring Cloud Alibaba Nacos Config 使用 DataId 和 GROUP 确定一个配置 ;
在nacos的config启动时会他优先回去nacos中心去读取配置,所有需要在bootstrap文件去写,服务发现的地址和服务管理的地址都需要填写和依赖也都要添加,还有需要添加发现依赖的注解 ,它会将读到的配置存放到springboot的环境对象中,它和在本地写是一样的
读取application.propreites文件是通过的监听器ConfigFileApplicationListener,也是将读到的属性保存到环境对象中
而BootstrapApplicationListener监听触发的事件是ApplicationEnvironmentPreparedEvent事件,这个事件其实和我们前面介绍监听application.properties的时候的监听器ConfigFileApplicationListener监听的是同一个事件。
bootstrap是先把数据拿到只会在启动,如果application和bootstrap都有的属性,以application的为准因为会被覆盖,nacos宕机之后,客户端的缓存不会丢失,而apollo的缓存会有一定的过期时间,nacos修改配置之后,不需要重新加载服务,支持自动刷新。
1、在nacos服务端 创建配置文件信息
启动好Nacos 之后,创建配置信息时 Nacos 添加如下的配置 :
Data ID: nacos-config.properties (配置文件的名称,在发现配置时需要使用)
Group : DEFAULT_GROUP (分组 ,可以使用默认的 )
配置格式: Properties
配置内容:
user.name=zhangsan
user.age=18
DataId 是以.properties 为扩展名 (默认的文件扩展名方式就是.properties ) ;在运行时必现使用 boostrap.properties 配置文件配置 nacos server 地址 ,同时,spring.application.name 值必须与Nacos 中配置的 Data Id 匹配(除了.properties 或者 yaml 后缀);
DataId 默认使用 spring.application.name 配置跟文件扩展名结合(配置格式默认使用.properties ),GROUP 不配置默认使用 DEFAULT_GROUP ;
注意当你使用域名的方式访问Nacos时,spring.cloud.nacos.config.server-addr 配置的方式为 域名:port ,例如 Nacos的域名为nacos.power.com,监听的端口为80,则 spring.cloud.nacos.config.server-addr=nacos.power.com:80,注意80 端口不能省略;
boostrap.properties 文件介绍:
boostrap.properties 文件也是有 yaml的 格式
它是高于application.properties文件先加载的 ,但是如果俩个文件都相同的数据时,默认是以application.properties为准。
使用这个文件需要添加对应的依赖,大多是都是在起步依赖里已经集成了
俩个文件的区别 :
而BootstrapApplicationListener监听触发的事件是ApplicationEnvironmentPreparedEvent事件,这个事件其实和我们前面介绍监听application.properties的时候的监听器ConfigFileApplicationListener监听的是同一个事件。
都是通过监听实现的,boostrap.properties会把文件内容直接读取到 环境对象中,bootstrap是先把数据拿到只会在启动。
四、Nacos配置中心动态刷新
Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发
org.springframework.cloud.context.refresh.ContextRefresher的refresh 方法;
可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新;
注意 如果要刷新 controller 类 获取其他类中需要使用@RefreshScope //进行刷新的注解
Nacos的配置中心,可以进行动态刷新的使用@RefreshScope 注解实现的,但是要注意是无法动态刷新地址内容,比如MySQL的连接地址等等。这种是无法的动态刷新的。
其他内容待完善,方便自己阅读。
.....