Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高
地址是8848
1.在父工程中加入依赖
<!--nacos的管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
2.子模块中加入客户端依赖(不使用原来的Eureka依赖)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.修改application.yml文件
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
问题:访问其他的集群比较的慢
解决:分级处理,访问本地集群比较的快
具体操作:
服务提供者的application.yml,添加如下内容
spring:
datasource:
url: jdbc:mysql://mysql:3306/cloud_user?useSSL=false
username: root
password: 123
driver-class-name: com.mysql.jdbc.Driver
shardingsphere:
sharding:
default-database-strategy:
tables:
# discovery:
# cluster-name: HZ
一级是服务,例如userservice
二级是集群,例如杭州或上海
三级是实例,例如杭州机房的某台部署了userservice的服务器
消费者调用提供者的接口时,优先选用本地集群
1、消费者的yml文件中修改
shardingsphere:
sharding:
default-database-strategy:
tables:
# discovery:
# cluster-name: HZ
2、yml文件中修改负载均衡规则
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
1、优先选择同集群服务实例列表
2、本地集群找不到提供者,才去其它集群寻找,并且会报警告
3、确定了可用实例列表后,再采用随机负载均衡挑选实例
服务器性能设备好的承担更多的请求(Nacos控制台选择编辑)
1.优先选择同集群服务实例列表
2.本地集群找不到提供者,才去其它集群寻找,并且会报警告
3.确定了可用实例列表后,再采用随机负载均衡挑选实例
不同的namespace下的命名空间不可见
例:设置了消费者的隔离环境,就没有办法使用服务接口访问提供者
形成命名空间之后有个命名空间id配置在消费者yml文件中
一、Nacos与eureka的共同点
1、都支持服务注册和服务拉取
2、都支持服务提供者心跳方式做健康检测
二、Nacos与Eureka的区别
1、Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
2、临时实例心跳不正常会被剔除,非临时实例则不会被剔除
3、Nacos支持服务列表变更的消息推送模式,服务列表更新更及时/
4、Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
问题:当微服务越来越多的时候,某一个配置文件需要修改,会影响整个服务
解决办法:统一管理配置——配置管理服务,配置完成之后,微服务自动读取
方式:
1.添加管理依赖(提供者)
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
2.添加bootstrap.yml
因为要先读取nacos文件
spring:
application:
name: userservice
profiles:
active: dev # 环境
cloud:
nacos:
server-addr: nacos:8848 # nacos地址
config:
file-extension: yaml # 文件后缀名
3.提供者的控制层读取
不用重启微服务自动更新
方式一:在有value注解类上加一个注解@Refreshscope
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oVRR5Qwt-1686295408315)(C:\Users\14065\AppData\Roaming\Typora\typora-user-images\image-20230609001212268.png)]
方式二:
新建一个配置类,在配置类中配置
使用@ConfigurationProperties
开发,生产,测试等环境下的值是一样的,配一次,都能被加载
Nacos集群搭建:
1、搭建MySQL集群并初始化数据库表
2、下载解压nacos
3、修改集群配置(节点信息)、数据库配置
4、分别启动多个nacos节点
5、nginx反向代理