一、安装教程
官方网址https://nacos.io/zh-cn/docs/quick-start.html
1.Nocas启动服务
切换到bin目录,执行命令:
sh startup.sh -m standalone
后台运行
nohup sh startup.sh -m standalone &
2.Nacos关闭服务
切换到bin目录,执行命令:sh shutdown.sh
3.Nacos查状态
ps -ef | grep nacos
二、SpringCloudAlibaba 整合Nacos
1.nacos原理宏观
a、生产者启动的时候将服务地址注册到注册中心Nacos,其中Key=服务名称,Value=Ip地址+端口号;
b、注册中心存放服务地址的列表,其中key是唯一的为服务名称,列表为List集合;
c、消费者从注册中心根据服务名称获取服务地址的列表;
d、消费者获取服务地址列表后根据某种负载均衡算法获取某一地址进行Rpc远程调用;
2.<!--添加nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.配置Nacos地址
server:
port: 9000
spring:
application:
name: video-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
4.启动类增加注解@EnableDiscoveryClient
5.controller里面实现调用使用HTTP的RestTemplate方法
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private RestTemplate restTemplate;
@RequestMapping("save")
public VideoOrder save(int videoId){
VideoOrder videoOrder = new VideoOrder();
videoOrder.setVideoId(videoId);
List<ServiceInstance> list = discoveryClient.getInstances("video-service");
ServiceInstance serviceInstance = list.get(0);
Video video = restTemplate.getForObject("http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+
"/api/v1/video/find_by_id?videoId="+videoId,Video.class);
videoOrder.setVideoTitle(video.getTitle());
videoOrder.setVideoId(video.getId());
return videoOrder;
}
三、nacos的作用
1.服务注册:
Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数 据,比如ip地址、端口等信息。 Nacos Server接收到注册请求后,就会把这些元数据信息存储 在一个双层的内存Map中。
2.服务心跳:
在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处 于 可用状态,防止被剔除。默认 5s发送一次心跳。
3.服务同步:
Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。
4.服务发现:
服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清 单,并且缓存在Nacos Client本地,同时会在Nacos Client本 地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存
5.服务健康检查:
Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到 客户端心跳的实例会将它的 healthy属性置为false(客户端服务发现时不会发现),如果某个实例 超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送 心跳则会重新注册)
四、nacos作为微服务配置中心
1.目标:统一管理配置, 快速切换各个环境的配置
2.直接添加依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
3.增加配置文件bootstrap.yml的优先级>application.yml
注释掉原application.yml文件,在nacos的配置中新建一个yml的配置,服务名称需要一 致 order-service,然后重启服务即可,若是出现 config dta not exist
1.建议重启nacos2.重新构建下项目mvn clean package -U 然后重启IDEA
spring:
application:
name: order-service
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #Nacos配置中心地址
file-extension: yaml #文件拓展格式
profiles:
active: dev
4.测试动态刷新配置
//Spring Cloud 原生注解 @RefreshScope 实现配置自动更新
@RefreshScope
public class OrderController {
//获取配置中的值,接口中输出查看即可
@Value("${video.title}")
private String videoTitle;
}
五、nacos的界面