Nacos的优势
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中⼼的现代 应⽤架构 (例如微服务范式、云原⽣范式) 的服务基础设施
• Nacos = Spring Cloud Eureka + Spring Cloud Config
• 服务发现与健康服务检查
• 动态配置管理
• 动态DNS服务
• 服务和元数据管理 nacos 会根据相同的服务名称⾃动做负载均衡,即不同端⼝的同⼀个项⽬就是两 个服务,就会⾃动做负载均衡。
Nacos与其他注册中⼼的对⽐:
Nacos的启动
通过Github拉取Nacos源码的⽅式启动
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
进⼊C:\***\nacos\distribution\target\nacos-server-2.4.0\nacos\bin⽬录,打开cmd 输入
startup.cmd -m standalone #表⽰单机启动,因为默认是集群启动
#如果懒得加命令可以直接在startup.cmd这个脚本⽂件⾥直接改 MODE的值改为standalone
进⼊给定的url即可进⼊nacos的可视化界⾯
账号密码都是 nacos
Springboot+Nacos做配置中⼼使⽤(Maven管理)
1.⾸先引⼊依赖:
<!-- https://mvnrepository.com/artifact/com.alibaba.boot/nacos-config-spring-
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.7</version>
</dependency>
2.配置application.yaml⽂件,指定nacos服务的地址
3.创建并指定dataId,group,开启reflash(动态配置的关键参数),开启boostrap
4.测试能否读取,在测试类⾥使⽤
成功读取!
SpringCloud+Nacos做配置中心使用
⼤致部分和Springboot整合类似,只提⼀些不同点:
a. 使⽤的是@Value⽽不是@NacosValue
b. 可以⽤@RefreshScope指定哪个类使⽤动态刷新配置
c. 配置中通过指定spring.application.name,和dataId对应
SpringCloud+Nacos做服务注册+发现
服务提供⽅Provider
a. 先引⼊依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${latest.version}</version>
</dependency>
b. 和注册中⼼⼀样指定nacos服务的地址
spring.application.name=service-provider #指定你提供的微服务名称
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
c. 启动类上加上@EnableDiscoveryClient
服务消费⽅Consumer
a. 同样引⼊依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
1
2
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${latest.version}</version>
</dependency>
<!--如果要做负载均衡还需要引⼊负载均衡器-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-clou
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>${latest.version}</version>
</dependency>
b.配置文件
spring.application.name=service-consumer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#负载均衡器配置(如果使⽤):
loadbalancer.retry.enabled=true # 启⽤重试机制
c. 启动类上加上@EnableDiscoveryClient
踩坑记录
注意Springboot版本和Nacos依赖版本的兼容,本⽂所⽤的Springboot是2.6.13版本,与Nacos 的0.2.7冲突,但是与0.2.12兼容,当使⽤0.2.7版本会出现如下错误:(也就是⽆法读取到,导致启动类 启动失败),切回12版本正常使⽤
官⽹也提供了Nacos-config和springboot以及springcloud的对照表,参照使⽤即可:版本说明
使⽤注意:
1.配置读取优先级: 从源码可以看出:
举例: 命令⾏>xxx_dev.properties>xxx.properties>xxx>本地
2.公用配置的使用
配置⽂件中指定shared-config/extension-config指定⼀个或多个公⽤配置
同样要注意优先级:
举例:主配置>extension-configs[1]>extension-configs[0]>shared-configs[1]>shared-configs[0]
3.Nacos 1.x和2.x的⼀些区别:
Nacos1.x:实际使⽤的Http 1.1这样的短连接模拟⻓连接,通过每30s发送⼀个⼼跳⽐对配置,⼀致 则保持连接,不⼀致的推给客⼾端最新的配置,TPS(每秒事务数)很⾼。 Nacos2.x:升级为⻓连接模式(gRPC+Rsocket),当服务端的配置变更可以直接推送给客⼾端,使得 通信效率⼤幅提升。⻓连接避免了1.x频繁的连接开销,⼤幅缓解了TIME_WAIT问题