Nacos 简介

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速

实现动态服务发现、服务配置、服务元数据及流量管理。

从上面的介绍就可以看出,Nacos的作用就是一个注册中心,用来管理注册上来的各个微服务。

核心功能点:

  • 服务注册: Nacos Client会通过发送REST请求想Nacos Server注册自己的服务,提供自身的元数据,比如IP地址,端口等信息。Nacos Server接收到注册请求后,就会把这些元数据存储到一个双层的内存Map中。
  • 服务心跳: 在服务注册后,Nacos Client会维护一个定时心跳来维持统治Nacos Server,说明服务一致处于可用状态,防止被剔除,默认5s发送一次心跳
  • 服务同步: Nacos Server集群之间会相互同步服务实例,用来保证服务信息的一致性。
  • 服务发现: 服务消费者(Nacos Client)在调用服务提供的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务拉取服务最新的注册表信息更新到本地缓存。
  • 服务健康检查: Nacos Server 会开启一个定时任务来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将他的healthy属性设置为false(客户端服务发现时不会发现),如果某个实例超过30s没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)

搭建Nacos环境

1 .安装Nacos
链接:https://pan.baidu.com/s/1clS8SszEjf89Hf8Hodgezg
提取码:0i3k

2 .启动Nacos
#切换目录

cd nacos/bin 
#命令启动 
startup.cmd -m standalone

linux'启动 nohup sh startup.sh -m standalone &

3 .访问Nacos

打开浏览器输入http://localhost:8848/nacos,即可访问服务, 默认密码是nacos/nacos

将服务注册到nacos注册中心上

1.在pom.xml中添加Nacos的依赖

<!--nacos客户端-->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.在主类上添加**@EnableDiscoveryClient**注解

@SpringBootApplication
@EnableDiscoveryClient
public class ProductServer {
    public static void main(String[] args) {
        SpringApplication.run(ProductServer.class,args);
    }
}

3.在application.yml中添加Nacos服务的地址

spring:
  cloud: 
    nacos: 
      discovery: 
        server-addr: localhost:8848
  1. 启动服务, 观察Nacos的控制面板中是否有注册上来的商品微服务

注册中心作用

1.我们的在启动的时候就会把它的信息高速注册中心,并且会拉取- -份
最新的服务列表信息
2.每隔一段时间会给注册中心去发送一个心跳包,告诉 注册中心还活着,并且会拉取一份最新的服务列表信息.
3.如果连续几次没有个注册中心发送心跳包,注册中心就会把节点信息给踢出掉

没有配置中心之前我们存在的问题

1.我们现在按照微服务架构拆分成很多的服务,很多的符都要用到这个redis,那么每一个服务都需要去配置-片redis的信息,假设redis配置发生了变化.
2.数据库账号和密码放到本地中不安全
3.没有历史记录,修改配置没有历史记录
4.切换环境比较麻烦,比如测试环境和开发环境很多配置都是不一样,我们切换时候还要改很多配置.
5.改了配置没有办法动态刷新

Nacos Config入门

使用nacos作为配置中心,其实就是将nacos当做一个服务端,将各个微服务看成是客户端,我们将各个微服务的配置文件统一存放在nacos上,然后各个微服务从nacos上拉取配置即可。

  1. 搭建nacos环境【使用现有的nacos环境即可】
  2. 在商品微服务中引入nacos的依赖
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> 
</dependency>
  1. 在微服务中添加nacos config的配置
    注意:不能使用原来的application.yml作为配置文件,而是新建一个bootstrap.yml作为配置文件
配置文件优先级(由高到低):
bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml
spring:
  application:
    name: product-service
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #nacos中心地址
        file-extension: yaml # 配置文件格式
  profiles: 
  	active: dev # 环境标识
  1. 在nacos中添加配置,然后把商品微服务application.yml配置复制到配置内容中.

配置动态刷新

在入门案例中,我们实现了配置的远程存放,但是此时如果修改了配置,我们的程序是无法读取到的,因此,我们需要开启配置的动态刷新功能.

  1. 在nacos中的product-service-dev.yaml配置项中添加下面配置:
appConfig:
  name: product2020

2.在商品微服务中新增NacosConfigControlller.java

@RestController
@RefreshScope
public class NacosConfigController {
    @Value("${appConfig.name}")
    private String appConfigName;
    @RequestMapping("/nacosConfig1")
    public String nacosConfig(){
        return "远程信息:"+appConfigName;
    }
}