Nacos使用指南
1.认识Nacos
Nacos是SpringCloudAlibaba的一个组件,遵循SpringCloud规范
2.Nacos的优势
1.支持服务端主动检测服务提供者状态。临时实例采用心跳检测,非临时实例采用主动检测
2.Nacos支持服务列表变更消息推送,消息更加及时
3.拥有服务分级存储、权重配置、环境隔离等友好配置,优化了服务提供和获取的各种方式
3.Nacos使用快速入门
3.1 安装Nacos
3.1.1 Windows安装
3.1.1.1 下载安装包
在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:
GitHub主页:https://github.com/alibaba/nacos
GitHub的Release下载页:https://github.com/alibaba/nacos/releases
windows版本使用nacos-server-xxx.zip
包即可。
3.1.1.2 解压
将这个包解压到任意非中文目录下,如图:
目录说明:
- bin:启动脚本
- conf:配置文件
3.1.1.3 端口配置
Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。
如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口:
修改其中的内容:
3.1.1.1.4 启动
启动非常简单,进入bin目录,结构如下:
然后执行命令即可:
-
windows命令:
startup.cmd -m standalone
执行后的效果如图:
3.1.1.5 访问
在浏览器输入地址:http://127.0.0.1:8848/nacos即可:默认的账号和密码都是nacos:
3.1.2 Linux安装
Linux或者Mac安装方式与Windows类似。
3.1.2.1 安装JDK
Nacos依赖于JDK运行,所以Linux上也需要安装JDK才行。
下载jdk安装包:
然后解压缩:
tar -xvf jdk-8u144-linux-x64.tar.gz
然后重命名为java
配置环境变量:
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
设置环境变量:
source /etc/profile
3.1.2.2 下载安装包
Linux版本使用nacos-server-xxx.tar.gz
包即可。nacos-server-1.4.1.tar.gz
3.1.2.3 解压
命令解压缩安装包:
tar -xvf nacos-server-1.4.1.tar.gz
然后删除安装包:
rm -rf nacos-server-1.4.1.tar.gz
3.1.2.4 端口配置
与windows中类似
3.1.2.5 启动
在nacos/bin目录中,输入命令启动Nacos:
sh startup.sh -m standalone
3.2 Nacos注册与发现
3.2.1 服务注册到Nacos
3.2.1.1 引入依赖
在需要注册到Nacos的服务的pom.xml文件中引入Nacos的客户端依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.2.1.2 修改配置文件
在需要注册到Nacos的服务的配置文件中添加Nacos地址,默认端口是8848
spring:
cloud:
nacos:
server-addr: localhost:8848
3.2.1.3 启动服务
找到需要注册到Nacos的服务的启动类,进行启动,启动成功后,登录到Nacos控制台,可以看到出现新的服务
启动后查看nacos控制台
3.2.2 服务分级模型
Nacos采用服务、集群、实例的分级模型,一个服务下可以有多个集群,一个集群下可以有多个实例。例如:一个orderService服务有三个不同实例:实例1、实例2、实例2,三个不同实例分布在不同的机房,一个机房中的实例就称为一个集群。微服务互相访问时,应该优先同一集群实例进行访问,当同一集群的实例不可访问时,才去访问其它集群的实例
3.2.2.1 给服务配置集群
修改服务的application.yml,添加 cluster-name
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: BJ # 集群名称
查看nacos控制台服务详情,可以看到出现集群信息
3.2.2.2 同集群优先访问策略设定
默认的ZoneAvoidanceRule
并不能实现根据同集群优先来实现负载均衡,Nacos提供了一个NacosRule
的实现,可以优先从同集群中挑选实例
-
给服务配置集群信息
spring: cloud: nacos: server-addr: localhost:8848 discovery: cluster-name: BJ # 集群名称
-
在服务的application.yml修改负载均衡的规则
例如给:orderService进行配置
orderservice: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
3.2.3 权重配置
实际使用场景中,不同的机器设备的性能也不同,最理想的场景是性能好的机器多承担一些请求,性能差的机器少承担一些请求,但是默认情况NacosRule是在集群内随机挑选,不会考虑机器性能情况。因此Nacos提供了控制台修改权重配置,权重越大,访问频率越高
在Nacos控制台,找到服务实例列表,点击编辑即可修改权重
注意:如果权重修改为0,则该实例永远不会被访问,可以用于服务升级和维护
3.2.4 环境隔离
Nacos提供了namespace来实现环境隔离功能,nacos中可以有多个namespace,每个namespace下有多个group和service,不同的namespace的服务之间是不可见的。Nacos中默认所有group和service都在一个namespace下,名称为public
3.2.4.1 namespace创建
-
在Nacos控制台点击页面新增按钮,添加一个namespace:
-
填写表单,填写空间名和描述,点击确定,生成新的命名空间
3.2.4.2 配置文件配置namespace
spring:
application:
name: userservice
cloud:
nacos:
server-addr: 192.168.1.109:8848
discovery:
cluster-name: BJ
namespace: 348c7a78-0b69-43ff-9987-9fc4cafec67c #命名空间ID,创建命名空间时自动生成,复制即可
3.3 Nacos配置管理
Nacos除了用做注册中心以外,它的另一大功能是配置管理,当微服务的数理越来越多时,微服务的配置文件难以进行管理,Nacos提供了配置管理,当配置文件变动时,及时通知对应的微服务,实现热更新
3.3.1 配置管理
3.3.1.1 Nacos添加配置文件
在Nacos控制台左侧找到“配置管理”下的“配置列表”选项,点击右侧“+“,填写配置表单
3.3.1.2 拉取配置文件
微服务要拉取Nacos里的配置,而且需要和本地配置文件application.yml中内容合并,才能完成项目启动
但是会有个问题,如果不先读取本地的application.yml文件,怎么会知道Nacos的地址?为了解决此问题,Spring引入了一种新的配置文件bootstrap.yaml,它会在application.yml文件被读取之前进行读取
3.3.1.2.1 引入nacos-config依赖
在微服务中引入nacos-config依赖和nacos-discovery依赖
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.3.1.2.2 添加bootstrap.yaml文件
在userservice微服务中新建bootstrap.yaml文件,并添加Nacos相关配置内容
spring:
application:
name: userservice # 服务名称
profiles:
active: pro # 环境名称
cloud:
nacos:
server-addr: 123.57.241.172:8848 #Nacos地址
config:
file-extension: yaml # 文件后缀名
会根据server-addr的值来获取Nacos地址,然后通过服务名称-环境名称-文件后缀名来获取配置文件,也就是上述配置文件中的:userservice-pro.yaml
3.3.1.2.3 读取nacos的配置文件
可以在Nacos中添加配置文件,并使用java代码进行读取配置
注:一般项目的核心配置或者需要热更新的配置可以放到Nacos管理的配置文件中,一般变动不太大或者属于微服务特有的配置还是放在微服务本地的配置文件中
3.3.2 配置热更新
在Nacos进行配置文件修改后,最理想的状态就是微服务不需要重启就能立即生效,也就是平常所说的配置热更新。Java中实现配置热更新,有两种方式
3.3.2.1 添加注解@RefreshScope
3.3.2.1.1 在nacos中新建配置
3.3.2.1.2 在@Value注入变量的类上添加注解@RefreshScope
3.3.2.2 使用@ConfigurationProperties注解
使用@ConfigurationProperties代替@Value注解
3.3.2.2.1 定义一个配置类,在类上加注解@ConfigurationProperties
3.3.2.2.2 注入配置类的bean到使用的地方,获取所要配置信息
3.3.3 配置共享
微服务启动时会去Nacos中读取多个配置文件,一般有两种格式:
- 服务名称-环境名称-文件后缀名,例如:userservice-pro.yaml
- 服务名称-文件后缀名,例如:userservice.yaml
而服务名称-文件后缀名不包含环境,因此可以被多个环境共享。当Nacos和本地出现相同属性配置时,有优先级之分:服务名称-环境名称-文件后缀名>服务名称-文件后缀名>本地配置