SpringCloud之Nacos学习使用
Nacos是SpringCloudAilibaba提供的开源组件,有了Nacos我们就可以代替Eureka和SpringCloudConfig了,我们只需要在服务器启动该组件就行
Nacos
Nacos是一个易于构建云原生得动态服务发现、服务配置和服务管理平台。
常用于做注册中心、配置中心和服务管理平台
注册中心
注册中心的演变过程:
-
使用RestTemplate来远程调用其他服务
-
手动维护一份服务的信息,每次需要查询时从这个注册表中去获取
-
通过nginx反向代理来实现服务的配置(upStream)
核心功能
服务注册: Nacos客户以REST请求形式向NacosServer注册自己的服务,提供自身元数据,NacosServer接收注册请求后,保存在一个双层Map中。
服务心跳: Nacos客户端会维护一个定时心跳告诉Nacos Server,说明服务一直处于可用状态,默认5s一次心跳。
服务同步: Nacos Server之间需要相互同步服务实例,用来保证服务信息的一致性。
服务发现: 服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存。
服务健康检查: Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)。
配置启动
在启动前需要先安装Nacos,可以参考官网上的安装,启动方式单机的话就使用standalone,这里不过多讲述。
首先,我们需要先查看自己的SpringCloudAilibaba版本和对应Nacos版本,避免因为版本的不适配从而踩一些坑。
版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
在建立好一个SpringCloudAilibaba项目后,我们可以引入nacos-discovery依赖,因为我这里需要引入web来做测试,所以也把web的相关依赖引入了进来。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在各个Service的application配置项目运行的端口和Nacos的配置文件
server:
port: 8010
spring:
application:
name: stock-service # 服务名称
cloud:
nacos:
server-addr: localhost:8847 # 注册地址
discovery:
username: nacos # nacos登录的账户
password: nacos # nacos登录密码
namespace: public # 命名空间
# ephemeral: false # 服务宕机是否需要下线
然后通过启动项目,在nacos中就可以看到对应注册的服务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJo6rj32-1677595993392)(C:\Users\DY\AppData\Roaming\marktext\images\2023-02-21-16-40-38-image.png)]
-
从上面可以看到public的命名空间是默认的,我们可以自己定制自己的命名空间,从而可以满足各种场景的需求
-
ephemeral是配置非临时实例,默认是true,即代表当这个服务节点宕机或者挂掉,会删除在服务内的节点,配置了false的话,就不会将这个节点移除,可以配合是否触发阈值保护使用达到雪崩保护的目的
-
同时可以结合负载均衡器,可以配置服务节点的权重,设置越大,分配请求越多。
集群搭建
-
默认下载中的startup.sh中mode默认是cluster,我们不需要修改
-
修改JVM内存参数,给节点设定内存,防止内存不够(可不配置)
-
修改conf/application.properties的配置,将数据源修改成mysql,密码也需要对应修改
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n7ttYBio-1677595993393)(C:\Users\DY\AppData\Roaming\marktext\images\2023-02-21-16-48-47-image.png)]
-
复制三份,分别对各个节点进行运行端口的修改
-
复制conf/cluster-example.conf到cluster.conf,并将各个节点都添加到该文件中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xsnpZBPX-1677595993393)(C:\Users\DY\AppData\Roaming\marktext\images\2023-02-21-16-52-00-image.png)]
-
启动各个节点,访问端口查看是否成功。
-
配置nginx,将注册请求转发到Nacos集群上
nginx配置:
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
upstream nacos-cluster{
server 10.60.36.29:8849;
server 10.60.36.29:8851;
server 10.60.36.29:8853;
}
server {
listen 8847;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster;
}
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
修改项目的地址,注册中心修改成 注册中心IP:8847即可,端口和IP根据自己机子决定
最后:
这里就到文章的末尾啦,如果有什么错误的话指大佬指正,👍
root html;
}
}
}
修改项目的地址,注册中心修改成 注册中心IP:8847即可,端口和IP根据自己机子决定
----------
> **最后:**
>
> 这里就到文章的末尾啦,如果有什么错误的话指大佬指正,👍