Spring Cloud Alibaba Nacos
1、Nacos介绍
概述
“Nacos”,前四个字母分别问Naming和Configuration的前两个字母,最后的s为Service,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,说白了就是注册中心+配置中心的组合,等价于SpringCloud之前的Eureka+Config+Bus,所以Nacos可以替代Eureka做服务中心,可以替代Config做配置中心。
安装与运行
下载地址:https://github.com/alibaba/nacos/tags
在安装Nacos前需要本地Java8和Maven的环境已经准备好,下载后双击stratup运行,分为windows和linux版本
访问 http://localhost:8848/nacos/ 进入Nacos,其默认的账号密码都是nacos,登录成功后即可看到如下界面:
2、Nacos作为服务注册中心
在pom文件中加入依赖
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在配置文件中将当前微服务注册到nacos中
spring:
application:
name: nacos_config_client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
先后启动nacos和微服务项目,可以看到已经成功注册进去了
3、Nacos作为服务配置中心
新建模块alibaba_nacos_config3377
pom包如下:
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
Nacos同SpringCloud Config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置后,才能保证项目的正常启动,而我们知道SpringBoot配置文件的加载顺序是存在优先级的,bootstrap的优先级要高于application,所以我们创建两个配置文件 bootstrap.yml (从配置中心拉取配置)和 application.yml(写自己的配置),我们配置 bootstrap.yml 以使3377服务从Nacos上拉取配置信息:
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml # 指定yaml格式的配置,也就是说从Nacos上读yaml格式的配置文件
然后用 application.yml
定制自己的配置信息,将环境定义为开发环境:
spring:
profiles:
active: dev # 表示开发环境
编写其主启动类后,然后编写其业务类,在业务来上添加SpringCloud的原生注解@RefreshScope
以使服务可以支持从Nacos配置中心动态刷新配置信息
package org.jun.Controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author junfeng.lin
* @date 2021/3/4 23:26
*/
@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
Nacos中的配置
在Nacos配置中心中添加配置信息,在Nacos配置中心中添加配置文件要遵循一定的匹配规则——Nacos中的 dataId 的组成格式及与SpringBoot配置文件中的匹配规则,更详细的信息可以参考Nacos官方文档,在Nacos SpringCloud中,dataId的完整格式为:
${prefix}-${spring.profile.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
在nacos中新建如下文件:
4、Nacos集群和持久化配置
1、概述
官网:https://nacos.io/zh-cn/docs
持久化存储:
默认使用了嵌入式数据库derby实现数据的存储,但是多个nacos节点下的数据存储是存在一致性问题的,也就是即不CAP理论中的C,nacos属于AP类型的。Nacos采用了集中式存储的方式来支持集群化部署,目前只支持Mysql的存储。
部署方式:
单机、集群、多集群(多数据中心场景)
2、将Nacos的默认数据库切换至mysql
在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:
- 1.安装数据库,版本要求:5.6.5+
- 2.初始化mysql数据库,在nacos-server-1.1.4\nacos\conf目录下找到sql脚本并到mysql中执行
- 3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow
再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql
3、Nacos+Nginx+Mysql生产环境配置
操作系统为Linux,nginx要求至少有两个,nacos要求至少有三个
通过nginx来做请求的转发,使用mysql来替代nacos自带的数据库来作为整个集群的数据库
3.1、Nacos的数据库配置和集群配置
1、新建MySQL数据库并用nacos中的SQL脚本新建数据库
2、配置nacos配置文件application.properties指定使用的数据源和数据库
3、配置nacos的集群配置文件cluster.conf,其中的IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP
3.2、编辑Nacos的启动脚本startup.sh使之能以不同端口启动
修改nacos安装目录下的bin目录中的startup.sh,有两处修改如下:
修改后,可以指定端口进行启动,如:
./startup.sh -p 8848
3.3、Nginx负载均衡器的配置
在nginx.conf中配置如下:
# 配置集群的ip和端口
upstream cluster {
server ip:port
server ip:port
server ip:port
}
# 进行路由的转发
location / {
proxy_pass: http://cluster;
}
在nginx的目录下,指定配置文件方式启动:
./nginx -c /usr/local/conf/nginx.conf
4、将微服务注册进nacos集群
修改微服务的配置文件,如下:
spring:
cloud:
nacos:
discovery: #Nacos服务注册中心地址
#server-addr: localhost:8848 # 原先的配置
server-addr: 127.0.0.1:80 #改成nginx的IP+PORT