1:nacos简介
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
可以将nacos理解成服务注册中心和配置中心的组合体,可以实现服务的注册与发现;还可以作为配置中心,实现配置的动态刷新
1.1注册中心原理:
- 服务提供者启动时,将自己的服务实例信息(服务名、IP地址、端口号等)发送到Nacos注册中心的数据存储系统中;
- 注册中心将服务实例信息存储在自己的数据存储系统中,并会定期向客户端发送心跳以维护与客户端的连接状态;
- 服务消费者启动时,向Nacos注册中心查询需要调用的服务列表,并订阅改服务的变更事件;
- 当新的服务实例加入或者已有实例下线时,注册中心会通过长连接通知所有订阅服务变更事件的服务消费者;
- 服务消费者在收到注册中心的通知后,更新本地的服务列表,并使用负载均衡算法从可用的服务列表中选择一个服务节点进行调用;
-
服务提供者会定期(默认5s一次,eureka是30s)向nacos发送心跳请求,当超过一定时间(默认15s,eureka是90s)没有收到服务提供者的心跳包后,就会更新其状态为不健康,如果30s没有收到服务提供者的心跳包,就会将其从服务中剔除;
2:安装Nacos
Windows系统下安装:
下载地址
Releases · alibaba/nacos (github.com)
启动很简单,点击bin目录下的startup.cmd启动;启动报错;Unable to start web server;nacos默认启动方式是集群启动;所以我们修改一下启动方式:
set MODE ='cluster'
//修改成下面
set MODE = 'standalone'
在浏览器打开
2.1作为注册中心
三步走:
(1)导入与你版本相对应的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
(2)配置连接文件:
spring:
cloud:
nacos:
discovery:
username: nacos
password: nacos
server-addr: localhost:8848
#如果命名空间是默认的public,就不要填写了
namespace:
(3)启动类中添加@EnableDiscoveryClient注解
(4)修改从服务中心拉取,gateway多添加一个
小坑:启动后没有服务,因为我配置文件没有application,添加即可
(5)网关配置完成
1:分别在order中,product中添加依赖,对应版本号;取消之前的yml配置
2:添加如下配置
添加配置:spring: application: name: order-server cloud: nacos: discovery: username: nacos password: nacos server-addr: localhost:8848 namespace:
3:启动类添加@EnableDiscoveryClient注解
启动nacos;
2.2作为配置中心
简介:用于集中管理应用程序的配置信息。它可以帮助开发者更好的管理应用程序的配置信息,提高应用程序的可维护性和可扩展性。
特点:集中管理:包括应用程序的基本配置、数据库连接信息、日志配置等;
动态更新:当配置信息发生变化时,Nacos配置中心会及时通知应用程序,使其能够及时更新配置信息;
(1)服务提供方添加依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
(2)添加一个bootstrap.yml在bootstrap.yml配置
spring:
cloud:
nacos:
discovery:
username: nacos
password: nacos
server-addr: localhost:8848
namespace:
config:
server-addr: localhost:8848
username: nacos
password: nacos
namespace:
#指定配置群组--如果是Public命名空间,则可以省略群组配置
group: DEFAULT_GROUP
#文件名,如果没有配置则默认为服务名
prefix: product-server
#指定文件后缀,默认properties
file-extension: yaml
server:
port: 9090
(3)在nacos中新建配置:
(4)在nacos中添加对应配置文件,注意Data ID与上述配置的服务名保持一致
(5)编写一个测试:保存
在nacos里就有了一个配置类的项
(6)访问:
(7)动态刷新配置项:在哪里调用就在哪里添加注解
@RefreshScope
共享配置文件;
一个项目中服务数量增加后,配置文件相应增加,多个配置文件中会存在相同的配置,那么我们可以将相同的配置独立出来,作为该项目中各个服务的共享配置文件,每个服务都可以通过Nacos进行共享配置的读取
需要共享的配置文件:
2:到idea,yml文件中添加配置:
3:对应的接口:
4:调用成功