黑马程序员:https://www.bilibili.com/video/BV1LQ4y127n4?p=17
简介
Nacos
阿里巴巴的产品,SpringCloud的一个组件,相比Eureka功能更加丰富,在国内受欢迎程度较高。
Github下载地址:Tags · alibaba/nacos · GitHub 推荐使用1.x版本
启动服务器
下载完毕后解压,进入bin目录下进入命令行,执行.\startup.cmd -m standalone
启动命令(standalone代表着单机模式运行,非集群模式):
Nacos默认集群模式运行。若不单机模式运行启动会报错。
关闭服务器
shutdown.cmd
或者双击shutdown.cmd运行文件。
在父类添加阿里巴巴管理依赖
注意版本号冲突
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2.1.4.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
服务提供者
导入Nacos依赖springcloud-provider-dept-8001
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<version>2.1.4.RELEASEversion>
dependency>
配置nacos
spring:
cloud:
nacos:
server-addr: localhost:8848
导入nacos依赖springcloud-consumer-dept-80
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
配置文件
# 端口
server:
port: 80
spring:
cloud:
nacos:
server-addr: localhost:8848
application:
name: nacos-demo
报错:Param ‘serviceName‘ is illegal, serviceName is blank
解决办法,给注册的服务添加一个name服务名字
启动测试
服务跨集群调用问题
服务提供者
修改配置文件
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: SH #上海集群
服务消费者
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 在消费中,优先访问杭州的集群
但是经过测试,依然采用轮询
的方式来访问集群。所以必须修改负载均衡。
根据集群负载均衡
在服务消费者springcloud-consumer-dept-80
中
优先访问已经设置的集群,如果本地没有,则访问其他集群。
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
根据权重负载均衡
实际部署中会出现这样的场景:
Nacos提高了权重配置来控制访问频率,权重越大则访问频率越高
当权重设置为0时,将不会被访问,所以可以用来重启服务。
Nacos中 服务存储和服务存储的最外层都是一个名为namespace的东西,用来做最外层隔离。
新建命名空间
创建完成
配置服务提供者
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
namespace: 55a18106-a5bf-43dc-b4aa-2615c63f39b8 # dev环境
ephemeral: false # 非临时实例
重启服务
不同的环境下,不可以访问。
No instance available for userservice
服务消费者—注册中心
定时拉取服务 pull:每隔三十秒更新一次。
主动推送服务 push:若30秒内服务宕机,注册中心会主动推送变更信息即使更新服务的状态。
服务提供者—注册中心
默认情况下所有的实例都是临时实例,宕机就会被剔除,推荐使用临时实例
。
非临时实例nacos不会采用心跳检测。如果宕机就会等待其恢复健康。
spring:
cloud:
nacos:
discovery:
ephemeral: false # 非临时实例
停掉服务后
共同点:
区别:
新建配置
配置获取原流程
新
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
bootstrap.yml
(系统级别配置文件)spring:
application:
name: userservice
profiles:
active: dev # 环境
cloud:
nacos:
server-addr: localhost:8848 # 地址
config:
file-extension: yaml # 后缀名
@NacosValue("${pattern.dateformat}")
private String dateformat;
@GetMapping("/now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}