Nacos注册中心,它可以替代Eureka,也是一个服务中心,但是她更好用,因为他是一个可视化界面,并且可以支持热更新,以及properties的配置也可以给这上边配置。所以nacos既是配置中心又是注册中心
使用步骤:
第一步:给父工程中Alibaba开发环境,想要使用Alibaba的组件就要使用他的以来环境,引入依赖:
<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>
在子工程中配置注册中心的地址:
spring:
cloud:
nacos:
server-addr: localhost:8848
注意:我们也知道springboot有一个约定大于配置的机制,因为小组件自己就是基于springboot开发的,所以当我们使用的时候,我们没有指定注册中心的地址那么我们的组件自己配置的就会去注册到8848中,spi的也是这样,即使我们导入的jar包有他的配置,但是外部的配置文件的优先级高于内部的优先级。还有就是我们的注册到注册中心,我们的注册名称就是我们的应用名称可以自己设置:spring.application.name:应用名称
Nacos集群:
当我们使用集群的时候,nacos也是支持我们负载均衡,负载均衡可以去可视化界面上去设置他的权重比值
使用集群首先设置集群名称
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
运行之后就是:
他们的应用名称相同时一般就是一个打的集群,但是为了防止异地容灾,我们就需要将服务器部署到不同的地方,防止一个机房出了天灾人祸导致全部服务器不能使用,这时候我们当在一个机房的服务器相互访问肯定是快与访问其他机房的服务器,这时候我们就需要把一个机房的服务器设置成一个集群,优先访问我们当前集群中的地址,如果我们这个机房的集群都挂了那么就去访问其他集群的地址
默认的ZoneAvoidanceRule
并不能实现根据同集群优先来实现负载均衡。
因此Nacos中提供了一个NacosRule
的实现,可以优先从同集群中挑选实例。
我们还需要给我们的子项目设置配置文件
那个userservice是我们的应用名称
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
分组:
隔离环境:
![](https://i-blog.csdnimg.cn/blog_migrate/84b544bee6af7261d6138abfe182db43.png)
意思就是我们不同的组相互不能访问,个人理解可以当作两个项目,我们一个组是项目一,另外一个组是项目二,我们项目一当然不能访问我们的项目二,所以我们可以将他们相互隔离, 也可以理解为我们即使访问的是都是名称为userservice这个集群名称,到那时我们访问的组不一样我们得到的地址就会不一样 ,就像mybatis一样,我们dao层即使都是insert方法,但是我们绑定的xml文件不一样,我们得到的数据就是不一样,这样做的目的就是为了将数据隔离,更安全,默认情况下是public
分组步骤
每一个组都有一个id,我们可以指定,如果不指定那么就会使用uuid生成的。
Nacos与eureka的共同点
都支持服务注册和服务拉取
都支持服务提供者心跳方式做健康检测
Nacos与Eureka的区别
Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
临时实例心跳不正常会被剔除,非临时实例则不会被剔除
Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
Nacos配置管理
当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。
当我们的服务器集群实例很多时,我们肯定是不能通过修改我们本地的配置文件来修改一些东西,因为都是一个集群,所以重复的配置我们可以使用一个公共的配置文件,这时候nacos就可以提供一个配置中心,但是我们在本地想要使用nacos的话,需要在bootstrap中配置,因为我们的application.yml的配置文件加载完毕就会加载bean工厂了,所以我们需要使用application这个配置文件之前加载配置中心的配置文件,这时候有一个bootstrap.yml可以在初始化时就会去加载外部的配置文件。bootstrap.yml优先级低于application.yml,如果bootstrap.yml有和application.yml同样的标签,那么使用application.yml里的标签内容
nacos配置中心使用步骤
![](https://i-blog.csdnimg.cn/blog_migrate/541c0e9dac61a3f50e6fd13fb1ccd50c.png)
在子模块中引入nacos-config依赖
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
添加bootstrap.yml配置文件
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
namespace: 当前项目所属组的id
注意:上边那个namespace的设置,我们如果没有这个组的id,那么就会去找public的配置文件,看看public有没有这个dev配置文件,如果我们配置文件在一个分组里,那么必须使用namespace指定配置中心的地址
读取配置文件我们可以使用
这种配置文件去读取
配置文件热更新:
方法一:
在我们使用的读取配置文档的那个类上面添加@RefreshScope这个注解即可,如图
方法二: