文章目录
- 注册
- 1. 引入依赖
- 2. yaml配置
- 设置命名空间
- 注册信息在nacos中的内存状态
- 总结nacos的服务注册发现机制
- 配置中心
- 应用场景
- 配置中心运行结构
- 远程配置:
- 1. 在本地进程添加config 依赖 和bootstrap依赖
- 2. 需要引入一个bootstrap.yaml文件
- 案例练习
注册
- 所有组件配置步骤-大三步
- 依赖
- yaml配置
- 配置类,注解的使用(nacos客户端没有)
- 逐步完成
1. 引入依赖
<!--nacos-注册抓取-client-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2. yaml配置
spring:
# cloud配置
cloud:
# nacos中注册发现的功能
nacos:
#填写服务端地址
discovery:
# 填写nacos的服务端地址
server-addr: localhost:8848
# 属性1:当前启动进程是永久实例还是临时实例(true 临时实例 默认)
ephemeral: true
# 属性2:macos实例的ip地址 (只有在众多服务器的时候使用 ->被别人访问时使用,<可被外界访>.)
# ip: 127.0.0.1
# 属性3:命名空间 (:后面是创建命名空间的id值),开发环境的隔离
namespace: 22233727-d5d1-4fea-9328-edf609a9afcb
# 属性4:分组 (主要是对版本进行分组,eg:1版本在一组,2版本在一组) 版本的隔离
group: 1.0
# 属性5:服务心跳检查 :永久实例不会剔除(nacos会主动问,查看是否存在),临时实例会剔除(主动发出心跳请求)
# 心跳检查的隔离时间
heart-beat-interval: 5
# 超时心跳删除时间
ip-delete-timeout: 20
- 临时实例,永久实例
- 同一个服务,可以启动多个实例,形成一个服务集群.
- 当前启动进程是永久实例还是临时实例 true 表示临时实例 false表示永久实例
spring.cloud.nacos.discovery.ephemeral=fasle
- 永久实例:nacos永远不删除的注册信息,就是永久实例.
- 临时实例:暂时为某些应用,环境准备的扩容实例,就是定义为临时实例.
- 例如: 淘宝每一个功能都是一个服务,而且具备多个实例,平日访问是固定流量,所以使用永久实例支持,如果双11来临,流量激增,需要增加临时实例,等待11完成,删除临时实例
- 客户端实例的ip地址
- 服务器ip地址有多个,因为配置多个网卡,有的网卡是外部访问的,有的网卡是局域网网卡,所以客户端web实例在nacos注册希望被别人访问调用一般会考虑是内部调用还是外部调用.
- 为了防止springboot自动读取的ip地址未必满足实例相互调用的需求,一般情况下,认为确定到底是哪个ip地址,填充到这个属性,携带到nacos.
spring.cloud.nacos.discovery.ip=xx.xx.xx.xx
- 服务心跳检测
-
后续服务实例和nacos服务端会保持一个心跳检测的机制.如果心跳检测结果失败,nacos就会认为这个实例不健康,会剔除实例或者保存不健康状态.
-
永久实例:故障,宕机.不会在心跳检测时,保持健康状态,但是不会剔除.
-
临时实例:故障,宕机,就会在一段时间之后,进行剔除.
-
spring.cloud.nacos.discovery.heart-beat-interval=5 spring.cloud.nacos.discovery.ip-delete-timeout=20
-
设置命名空间
- 开启Nacos服务之后用浏览器进入:http://localhost:8848/nacos/该网站
- 默认情况下,只有public公用命名空间.
- 创建完新的命名空间,可以在服务列表中看到隔离的注册信息
- 分组配置
- 在同一个命名空间注册的服务实例,可以进行分组操作.主要功能之一–灰度发布.
- 简单介绍一下灰度发布: 开发项目,项目发布的特点两个 一个是持续发布,一个是版本发布. 持续发布特点中,有灰度发布的概念.
注册信息在nacos中的内存状态
总结nacos的服务注册发现机制
- nacos结构:
- 角色2个: 服务端(nacos-server进程),客户端(spring cloud整合到web应用组件)
- nacos功能:
- 服务注册: 在微服务中,服务注册目的,是为了让别的服务发现,获取当前服务信息
- 服务发现: 为了调用别的服务,从而在nacos进行信息的抓取
配置中心
应用场景
- 在微服务开发过程中,yaml文件 json文件 properties文件,非常多的冗余重复的内容.不方便统一管理.
- 例如: 开发环境连接的redis 110.99.88.77:8999.20多个服务,全部在开发环境指向这个redis.用了2天,运维提示服务器崩溃了. redis环境换了 111.99.88.77:8999.
- 需求: 将重复的配置,提取到通用的管理平台-nacos
配置中心运行结构
远程配置:
1. 在本地进程添加config 依赖 和bootstrap依赖
<!--clint config nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--spring版本大于2.3.x,需要认为引入-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
2. 需要引入一个bootstrap.yaml文件
- 上面的bootstrap依赖,就是为了让springboot启动的时候加载这个bootstrap.yaml文件的.
- bootstrap.yaml 能够被springboot加载,并且先于 application.yaml文件加载的.
- application.yaml启动进程的参数配置.
- bootstrap.yaml收集环境信息的参数配置. 读取到远程文件配置内容,放回application.yaml使用.
如果远程读的数据和application.yaml冲突的. application.yaml会覆盖远程读取的.
spring:
profiles:
#开启不同环境
active: dev
---
spring:
config:
activate:
on-profile: dev
#告诉bootstrap 远程配置中心nacso的地址 和我们尧都区的配置文件(先读默认的)
application:
# 所有的application.name 都是远程名称
name: csmall-cart
cloud:
nacos:
config:
server-addr: localhost:8848
#文件支持的类型 (默认properties txt json yaml xml html)
file-extension: yaml
# 前缀,默认是服务名称,不想使用默认值可以自定义
# prefix:
#多环境允许的 命名空间的id
namespace: 22233727-d5d1-4fea-9328-edf609a9afcb
#持续发布汇总,保证灰度发布
#group: 1.0
#是否支持刷新,远程配置一旦修改,本地进程内存数据是否刷新,如果为true则不需要刷新
refresh-enabled: true
#读取指定文件 里面是List集合
shared-configs:
- data-id: datasource.yaml
group: 1.0
refresh-enable: true
- data-id: mybatis.yaml
group: 1.0
refresh-enable: true
- data-id: nacos.yaml
group: 1.0
refresh-enable: true
---
这种配置方式,读取文件的逻辑
- 通过bootstrap+nacosconfig配置,默认读取的文件格式
- {spring.application.name}-{spring.profiles.active}.{file-extension}
- 服务名称-环境名称.文件后缀扩展
- 对于当前stock服务,应该在nacos中准备一个文件 csmall-stock-dev.yaml
- 没有指定具体的命名空间,没有指定分组
- 填写具体的文件信息
案例练习
使用:#读取指定的文件 shared-configs:
- 同时读取远程一个配置了datasource的属性文件,datasource.yaml,
- 同时读取远程一个配置了nacos注册信息的属性文件,
- nacos.yaml同时读取远程mybatis配置,mybatis.yaml
将公共配置文件中存在以上三个配置提取到配置列表
- datasource.yaml
- mybatis.yaml
- nacos.yaml