一:前言
最近在学习Nacos,Nacos是一个更易于构建在云原生应用的动态服务发现、配置管理和服务管理平台。相对于传统的注册中心(Eureka、Consul等),Nacos集百家之长,将原有的功能进行优化,并新增功能。这就使得它成为目前较好的一个服务管理平台。
1:Nacos有更丰富的功能和易用性,如动态配置分组、服务健康检测等;
2:Nacos有更活跃的社区和生态支持,且目前还在更新维护,Eureka已停止更新维护,不过目前市面上还是有不少使用Eureka的公司及项目,一方面是停更不影响使用,也没什么大问题,项目中还是以业务为主。另一方面是项目体积过大,不好切换。
3:Nacos有更好的性能和低延迟集群,如CAP优化和集群扩展等。
二:搭建配置
首先,Nacos和Eureka注册中心的搭建方式不同。
Eureka的服务注册页面是跟随项目启动,我们通常会编写一个或多个微服务项目,专门用于做注册中心(服务端集群),后续的微服务指定注册中心(集群)并注册进去。
Nacos的注册中心则是和项目分离,下载官网压缩包解压后,运行Nacos即可,注册中心就搭建完成,后续微服务指定Nacos地址即可注册进去。
1:安装运行
官网地址:Releases · alibaba/nacos · GitHub
根据自己需求下载安装不同版本即可,一般来说最新的往前推一两个即可。windows选择zip压缩包,linux选择tar压缩包。这里先做单机启动,用于演示。
①:windows解压运行
下载zip并解压,解压后在bin目录上cmd打开窗口运行命令,注意:Nacos从2.0.3版本开始默认以集群模式启动。
所以老版本可以直接使用这个命令:startup.cmd
新版本再使用这个命令则会启动报错,需要指定单机模式启动:startup.cmd -m standalone
也可以修改Nacos的默认启动方式为单机模式:set MODE="standalone"
==》
②:linux解压运行
将tar压缩包放至linux机器上,使用命令解压压缩包:tar -zxvf nacos-server-2.3.1.tar.gz
解压后切换至bin目录,单机启动nacos:sh startup.sh -m standalone
③:管理页面
运行成功后,可以输入登录地址,访问nacos:http://localhost:8848/nacos,账号密码默认都是nacos,新版本地不需要登录。
登录成功后,这里一开始是没有数据的,可以新增配置,并且这个配置会持久化到数据库,这个后面会说到。
到这里就下载、安装并运行完成了,这个只是单机模式的启动,集群会比较复杂,不过练习使用也足够了。
2:代码配置
Nacos运行成功后,表示注册中心已经搭好了,接下来可以将微服务注册进去了。
①:添加依赖
注意这里是因为父模块声明了spring cloud alibaba的版本,所以这里可以不做版本声明。
<!--添加Nacos客户端依赖,用来注册进注册中心,该注解还包括了负载均衡Ribbon-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
②:连接配置
在application配置文件中,添加Nacos的微服务名称及连接地址。
spring:
application:
name: cloud-nacos-provider #微服务名称,注册中心显示
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
在消费端可以多加一条配置,用于负载均衡的调用。使用传统 @LoadBalanced 也可以。
service-url:
nacos-user-service: http://cloud-nacos-provider
③:添加注解
主启动类上添加注解,表示启动Nacos服务。
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderNacos9001 {
public static void main(String[] args) {
SpringApplication.run(ProviderNacos9001.class, args);
}
}
④:注册成功
启动微服务,服务成功注册进Nacos,且配置负载均衡后,多个微服务时可以按照指定策略调用或默认轮询调用。
到这里服务就注册进去了,后续就可以从注册中心获取服务并进行后续操作。
三:环境部署
正式使用时,一般会有多台机器,也就是集群甚至多集群,所以环境部署还是以集群部署为主。
这里简单记录下单机和集群部署的流程。
1:单机部署
单机部署和我们上面操作一致,就一点需要注意。
配置列表默认使用自带的数据库Apache Derby,只使用一个Nacos的话没有问题。但是如果开多个Nacos的话,每个Nacos都自带一个默认数据库,就会存在数据不一致问题,为了解决该问题,Nacos(0.7版本)采用了集中式存储的方式来支持集群化,目前只支持Mysql。
修改Nacos数据库为Mysql,注意Mysql版本要求5.6.5+,本人使用5.7版本。
①:创建表
复制nacos => config文件夹下Mysql文件内容,到Mysql数据库执行即可,不用修改。
这里是新版,老版本Nacos文件名可能名称不一样,但是内容是一样的。
②:修改配置
修改Nacos => config下application.properties文件,添加Mysql的数据源配置,注意Mysql版本如果是8.0+,需要在连接配置加上时区。直接在原文件下加配置即可。Mysql数据库要改成自己的。
#可直接替换上面的注释,这里用作学习,新增
#*************** Config Module Related Configurations ***************#
### If user MySQL as datasource:
# 指定数据源为 MySQL
spring.datasource.platform=mysql
### Count of DB:
# 数据库实例数量
db.num=1
# 数据库连接信息,如果是 MySQL 8.0+ 版本需要添加 serverTimezone=Asia/Shanghai
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3307/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai
db.user=root
db.password=root
修改保存配置之后,需要重启Nacos,在页面录入配置信息,到数据库查看是否生效。
四:配置中心
主要用于解决分布式面临的一些配置问题,微服务过多导致不同环境配置文件过多,且不能动态修改。所以将配置上云,能实现不改代码直接完成配置更换。
和SpringCloud Config的区别是:
SpringCloud Config的方式是将配置放在Git上,配置文件中通过连接Git读取。这个后续可能会再写个文章记录下。这里着重介绍Nacos Config的方式。
Nacos Config配置是在页面上进行的,并且数据是存储在数据库中的,代码读取数据库中的配置,可以实现修改配置直接生效。存储的数据库默认是Apache Derby,可修改为Mysql数据库用于持久化。
注意:使用的数据库最好一开始能确定下来,中途如果更换,需要处理历史配置信息。
1:页面配置
首先在页面进行配置,配置的级别是:命名空间 > 分组Group > Data Id
命名空间是最大的范围,用来区分环境,默认是public。如果想要修改,添加新的命名空间即可。
分组是配置文件的进一步划分,默认是default。要使用其他的,创建配置时填写即可。
Data Id是具体配置的id,注意该配置是根据规则在后端拼接起来的。创建配置时填写。
①:命名空间新增
老版本中命名空间id是随机的,2.X版本可自定义设置,不可重复。id在后端配置用来读取。
默认的public不能删除,后续新增的可以删除。
②:配置新增
先选中指定的命名空间,默认或者没新增,就是public。
填写分组和Data Id,点击发布即可。
新增后配置列表:
如果已经切换为Mysql数据库,那么此时就可以到数据库查看配置。且后续在页面修改配置,即可生效。
2:代码配置
添加客户端依赖
<!--nacos-config客户端依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
添加配置,按照规则要和页面上的配置信息一致。
#配置端口号
server:
port: 3377
#配置Spring
spring:
application:
name: nacos-config-client #微服务名称,注册中心显示
profiles:
#active: dev #开发环境
#active: test #测试环境 dataId是最小范围,配置什么就加载什么
active: info #添加相同dataId,测试分组和命名空间,读取不同环境下配置
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
config:
server-addr: localhost:8848 #nacos作为配置中心地址,不同于eureka需要单独一个模块获取gitee配置。nacos只需要一个客户端,读取页面(服务端)配置
file-extension: yaml #指定yml格式的配置,需和页面配置对应
group: dev-group #添加分组,获取不同分组下配置
namespace: 1001 #命名空间,新版本可以自定义id,添加后表示读取不同命名空间下的配置
#页面config配置规则 服务名-风格环境-配置文件格式 添加命名空间和分组后,表示读取不同空间下的不同分组下的不同dataId微服务
#${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
#这里为:nacos-config-client-info.yaml
主启动类配置,添加Nacos客户端注解和自动刷新注解
///支持nacos的动态刷新功能,可以加在启动类上,也可以加在相应接口上
@RefreshScope
@SpringBootApplication
@EnableDiscoveryClient
public class ConfigClientNacos3377 {
public static void main(String[] args) {
SpringApplication.run(ConfigClientNacos3377.class, args);
}
}
3:启动测试
配置完成后,启动项目并尝试获取配置信息中的数据,并测试改变后是否刷新。
至此,Nacos基础的使用演示就到这里了,当然更深层的东西还有很多,正式生产使用所面临的场景及各种问题也有很多,这些也还需要我们继续学习。以上也只是我日常学习所记录的,希望能够帮到大家。