SpringCloud05-Nacos
简单的介绍了SpringCloud中的Nacos。
Nacos注册中心
启动
startup.cmd -m standalone |
注册与发现
由于SpringCloud Commons定义了统一的接口规范
所以只需要改变引入的依赖和地址即可
- 在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖:
<dependency> |
- 注释掉order-service和user-service中原有的eureka依赖。
- 添加nacos的客户端依赖
<!-- nacos客户端依赖 --> |
- 修改user-service&order-service中的application.yml文件,注释eureka地址,添加nacos地址
spring: |
启动并测试
总结
- Nacos服务搭建
- 下载安装包
- 解压
- 在bin目录下运行指令: startup.cmd -m standalone
- Nacos服务注册或发现
- 引入nacos.discovery依赖
- 配置nacos地址spring.cloud.discovery.nacos.server-addr
- Nacos服务搭建
Nacos服务分级存储模型
xxxxxxxxxx6 1ribbon:2 eager-load:3 enabled: true # 开启饥饿加载4 clients: userservice # 指定对userservice这个服务饥饿加载5 - userservice16 - userservice2yaml
spring: |
总结
Nacos服务分级存储模型
- 一级是服务,例如userservice
- 二级是集群,例如杭州或上海
- 三级是实例,例如杭州机房的某台部署了userservice的服务器
- 如何设置实例的集群属性
- 修改application.yml文件,添加spring.cloud.nacos.discovery.cluster-name属性即可
心
- 修改application.yml文件,添加spring.cloud.nacos.discovery.cluster-name属性即可
那么如何设置orderservice也进行集群属性配置使得远程调用可以优先调用本地的集群?
- 1.修改order-service中的application.yml,设置集群
spring: |
- 2.在order-service中设置负载均衡的IRule为NacosRule,这个规则会优先寻找与自己同集群的服务
userservice: |
- 3.注意将user-service的权重都设置为1
Nacos负载均衡的策略:先访问本地的集群,在本地的集群内随机负载均衡
那么如何进行根据权重负载均衡呢?
Nacos提供了权重配置来控制访问的频次
在Nacos页面进行权重配置即可
权重为0即为停止访问,可以用来停机进行版本升级,再小量的提升权重,放入小部分用户进行测试,若无问题则调整群众,进行一个平滑的升级
Nacos的环境隔离-namespace
修改命名空间:修改order-service的application.yml,添加namespace:
spring: |
Nacos环境隔离
- namespace用来做环境隔离
- 每个namespace都有唯一id
- 不同namespace下的服务不可见
Nacos注册中心细节
非临时实例:yml中的discovery:ephemeral: false
1.Nacos与eureka的共同点
- 都支持服务注册和服务拉取
- 都支持服务提供者心跳方式做健康检测
2.Nacos与Eureka的区别
- Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
- Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
Nacos配置管理
统一配置管理
需求:
- 配置更改热更新
如何管理:Nacos表单填写配置名称
- Data ID: 配置文件的id:[服务名称]-[profile].[后缀名]
- Group:分组:默认即可
- 格式:建议yaml
有个问题:Nacos的地址存于application.yml ,如何先读取到naocs地址呢?
有个bootstrap.yml优先级高于本地的配置文件,写在其中即可
配置步骤如下
- 1.引入Nacos的配置管理客户端依赖:
<!-- nacos配置管理依赖 --> |
- 2.在userservice中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml:
spring: |
中间的三项配置即为Data ID
==将配置交给Nacos管理的步骤==
- 1.在Nacos中添加配置文件
- 在微服务中引入nacos的config依赖
- 在微服务中添加bootstrap.yml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件
==如何进行热更新==
Nacos配置更改后,微服务可以实现热更新,方式:
通过@Value注解注入,结合@RefreshScope来刷新
通过@ConfigurationProperties注入
自动刷新注意事项:
- 不是所有的配置都适合放到配置中心,维护起来比较麻烦
- 建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置
共享配置
- 微服务会从nacos读取的配置文件:
- [服务名]-[spring.profile.active].yaml,环境配置
- [服务名].yaml,默认配置,多环境共享
- 优先级:
- [服务名]-[环境].yaml >[服务名].yaml >本地配置
Nacos集群
集群搭建步骤:
- 搭建MySQL集群并初始化数据库表
- 下载解压nacos
- 修改集群配置(节点信息)、数据库配置
- 分别启动多个nacos节点
- nginx反向代理