全称:NamingConfigurationService
- 下载:https://github.com/alibaba/Nacos
- 官方文档:https://nacos.io/zh-cn/index.html
- 官方文档:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery
- 当前稳定版:1.4.1 2021.01.15
一、Docker 安装 Nacos
注:nacos 对内存的要求比较大,如果内存不够,可能会导致start不起来。
拉取镜像后运行(单机版)
1
docker run -d -p 8848:8848 -e MODE=standalone -e PREFER_HOST_MODE=hostname --restart always --name my-nacos nacos/nacos-server
访问 http://ip地址:8848/nacos/ 进入Nacos界面,默认用户名和密码均为 nacos (密码可进入后在右上角更改)
当前使用的:用户名 nacos 密码:通用
二、注册到 Nacos
1. 微服务提供方
pom依赖(当前2.2.1版本)
1
2
3
4<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>yaml配置
1
2
3
4
5
6
7
8
9
10
11
12
13spring:
application:
name: xxxx
cloud:
nacos:
discovery:
server-addr: nacosIP地址:8848 #配置Nacos地址
# 暴露端点
management:
endpoints:
web:
exposure:
include: '*'启动类 照常需要
@EnableDiscoveryClient
2.微服务调用方
由于Nacos实质上包含了Ribbin,因此自带了负载均衡。
pom依赖
1
2
3
4<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>配置文件yaml:
1
2
3
4
5
6
7spring:
application:
name: xxx
cloud:
nacos:
discovery:
server-addr: nacosIP地址:8848 #配置Nacos地址配置类(RestTemplate) 需要加 @Loadbalance
1
2
3
4
5
6
7
8
public class ApplicationContextConfig {
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}启动类:加
@EnableDiscoveryClient
controller直接注入依赖使用
1
2
private RestTemplate restTemplate;
三、AP、CP模式切换
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
四、Nacos 作为配置中心
微服务从配置中心加载配置
pom依赖
1
2
3
4
5<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>yaml配置
1
2
3
4
5
6
7
8
9
10
11# bootstrap 配置
spring:
application:
name: 微服务名
cloud:
nacos:
discovery:
server-addr: Nacos IP:8848 #服务注册中心地址
config:
server-addr: Nacos IP:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置1
2
3
4# application.yaml
spring:
profiles:
active: dev启动类添加
@EnableDiscoveryClient
注解controller:添加注解
@RefreshScope
用于配置刷新。
五、在Nacos上添加配置
1. Data ID 命名规则
${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
- prefix默认为spring.application.name的值
- spring.profile.active既为当前环境对应的profile,可以通过配置项spring.profile.active 来配置
- file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension配置
- 举例:xxx-dev.yaml
2. 添加配置
配置管理 -> 配置列表 -> Data ID -> YAML
注:要使用默认的Group,否则需要配置才行,不然无法加载。
3. Nacos 自带动态刷新
- 修改Nacos 上的配置后会自动刷新。
六、Nacos 的NameSpace、Group、DataId
一个大型的微服务系统,通常包括开发、测试、生产环境。而每个大的微服务系统还有很多子项目,每个子项目又都会有相应的开发测试生产环境。
- NameSpace:进行开发、测试、生产环境的隔离
- Group:用于区分大型微服务的每个子项目
- Data Id:用于区分每个子项目的开发、测试和生产环境。
1. NameSpace
在Nacos上创建命名空间,如dev,将得到命名空间ID
将命名空间加入配置文件
1
2
3
4
5
6
7
8
9
10
11
12spring:
application:
name: xxx
cloud:
nacos:
discovery:
server-addr: IP:8848 #服务注册中心地址
config:
server-addr: IP:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
group: XXX_GROUP
namespace: namespace ID此时工程将加载 namespace ID 的 XXX_GROUP 的 xxx-dev.yaml 配置文件(若DataID按照3中的配置)。
2. Group
通过在配置中指定不同的Group来加载不同分组下的配置
1 | spring: |
3. Data ID
通过指定如下配置加载不同环境下的配置(dev、test、prod)
1 | spring: |
七、Nacos 的数据持久化
Nacos默认使用内嵌的 Derby 数据库,但这样无法保证集群情况下的数据一致性,的0.7版本之后,支持了MySQL的配置数据持久化。
路径:请求 -> Nginx集群 -> Nacos集群 -> MySQL集群
1. Nacos 切换到MySQL数据库
注:nacos 1.3.1版本之后支持MySQL8。
找到SQL脚本,直接到数据库执行(下载nacos-server-1.4.1.zip 解压后 打开nacos/conf/nacos-myysql.sql)
给sql脚本添加下面两句后直接在数据库执行。
1
2CREATE DATABASE nacos_config;
USE nacos_config;配置Nacos,复制官网配置,使用MySQL数据库,根据自己的数据库信息修改放到对应文件后重启Nacos,即可切换。
docker exec -it 容器ID bash
/home/nacos/conf/application.propertise1
2
3
4
5
6mysql =
1 =
jdbc:mysql://IP:3307/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true =
root =
xxxxxxxx =重启容器,此时Nacos的数据库便替换为了MySQL。
八、Nacos集群
1. Nacos 服务集群
按照一(Docker 安装 Nacos) 方式在三台服务器启动三个Nacos服务,
在 /home/nacos/conf/ 下新建 cluster.conf
输入以下内容(各个Nacos容器的IP和端口)
1
2
342.192.52.xxx:8848
47.102.130.xxx:8848
47.104.220.xxx:8848添加后重启三个服务。
2. Nginx 配置(集群)
路径:请求 -> Nginx集群 -> Nacos集群 -> MySQL集群
通常Nginx也集群配置(这里没有采用集群)
Docker启动Nginx容器前,Nginx的default.conf 配置如下
1
2
3
4
5
6
7
8
9location / {
proxy_pass http://cluster;
}
location /api {
proxy_pass http://cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}Docker启动Nginx容器前,Nginx的 nginx.conf 配置如下
1
2
3
4
5
6
7http {
upstream cluster {
server 42.192.52.xxx:8848;
server 47.102.130.xxx:8848;
server 47.104.220.xx:8848;
}
}访问:http://ip:8848/nacos/#/login 即可访问到Nacos,均衡轮询访问Nacos集群。
九、微服务注册到Nacos集群
yaml配置
1
2
3
4
5
6
7
8
9
10
11
12
13spring:
application:
name: 微服务名
cloud:
nacos:
discovery:
server-addr: nginx IP:8848 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'启动类添加常用注解
@EnableDiscoveryClient
可在服务列表看到注册的微服务。

...
...
本文为作者原创文章,未经作者允许不得转载。