Nacos基本使用
Nacos是微服务架构中,可以作为注册中心或者配置中心的技术实现,如下图所示
服务提供者:一次业务中,暴露接口给其它微服务调用,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)
提供者与消费者角色其实是相对的,一个服务可以同时是服务提供者和服务消费者
Nacos作为注册中心
- 1、服务提供者在注册中心注册信息
- 2、服务消费者拉取服务提供者列表
- 3、服务消费者负载均衡选择一个
- 4、服务消费者进行远程调用消费
服务提供者在向注册中心注册时,可以选择实例类型,若为临时实例,则主动向注册中心发送心跳续约,失效时被中心剔除;若为非临时实例,则注册中心主动向该实例发送心跳探测,失效时不会被中心剔除。
若注册中心的服务提供者列表发生变化时,注册中心会主动向服务消费者发送变更通知,即时变客户端服务更提供者列表
Nacos客户端搭建:
1、引入依赖
<!--nacos的管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- nacos客户端依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、配置文件
spring:
datasource:
application:
name: nacosserver #服务注册名
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: Cluster1 # 集群名
namespace: 70a70a58-07be-4857-8946-36a743ef7e11 #命名空间
ephemeral: true #是否为临时实例
Nacos服务分级存储模型
服务>集群>实例,服务调用尽可能选择本地集群的服务,跨集群调用延迟较高,本地集群不可访问时,再去访问其它集群
配置:spring.cloud.nacos.discovery.cluster-name=集群名
优先本地负载均衡配置为:userserver.ribbon.NFLoadBalancerRuleClassName=com.alibaba.cloud.nacos.ribbon.NacosRule #优先本集群,本集群内再随机
Nacos根据权重负载均衡
在Nacos的管理端进行配置,权重值越大,访问频率越高,如果权重值为0,则不再访问,可适用于优雅启停
Nacos环境隔离
Nacos中服务存储的数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离,内层Group,最内层为Service/Data
在Nacos的管理端进行namespace的新建
每个namespace都有唯一id
服务设置namespace时要写id而不是名称
不同namespace下的服务互相不可见
Nacos可以单台启动,也可以多集群启动
Nacos作为配置中心
统一配置管理,配置更改热更新,并且会将核心配置主动通知给微服务
- 1、在Nacos管理端进行配置添加
- 2、项目启动-(读取Nacos配置文件)-读取本地配置文件-创建Spring容器-加载Bean
- 3、bootstrap.yml会在本地配置文件之前读取,此文件就可以先配置Nacos的信息
- 4、引用配置依赖spring-cloud-starter-alibaba-nacos-config
- 5、配置文件配置:spring.cloud.nacos.server-addr.config.file-extension=文件后缀名,例如yaml
- 6、代码中使用@Value(“${}”)获取,或者@Autowired
Nacos的配置管理热更新
- 1、使用@Value时,在使用配置数据的类上添加注解,启动热更新:@RefreshScope
- 2、使用@ConfigurationProperties注解
多环境配置共享
微服务启动时会从nacos读取多个配置文件:例如 userserver-dev.yaml和userserver.yaml,一个为环境配置,一个为共享配置
不同微服务共享的配置文件:通过shared-configs指定、通过extension-configs指定
环境配置>共享配置>extends-configs>shared-configs>本地配置
Nacos集群搭建及配合Nginx
1、完成MySql集群部署和初始化数据库表
如果Mysql版本过低,发布参数失败,那么Nacos脚本里面,将datetime类型改为timestamp类型、去掉DEFAULT CURRENT_TIMESTAMP即可
2、配置集群配置
Nacos和Eureka对比
相同:
服务提供者在注册中心注册服务信息,服务消费者定时拉取服务列表,远程调用
提供者每隔一段时间进行心跳检测
不同:
- 1、Nacos存在非临时节点的主动健康检测,Nacos的服务有两种实例类型
- 2、若在定时拉取服务列表中间存在提供者变更时,Eureka无法做到实时更新,但是Nacos会主动推送消息
- 3、Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式,AP强调数据可用性,CP强调数据可靠性
- 4、Nacos还可以作为配置中心