用nacos来取代eurka作为服务注册中心,取代config作为配置中心
1 Nacos简介
1.1 介绍
- Nacos:Naming Configuration Service
- 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台
- Nacos就是注册中心 + 配置中心的组合
- Nacos = Eureka + Config + Bus
1.2 功能
- 替代Eureka做服务注册中心
- 替代Config做服务配置中心
1.3 Nacos下载与安装
- 演示下载的是windows版,解压后,进入bin文件夹
- 打卡命令行输入
startup -m standalone
,意思为单机模式运行,非集群模式
- 访问网址:http://localhost:8848/nacos ,就可以进入web后台
- 默认账号密码为:nacos,可进入后台
2 Nacos服务注册中心
2.1 服务提供者搭建nacos
- (1)创建项目
cloudAlibaba-provider-payment9001
- (2)修改POM(引入依赖)
1
2
3
4
5
6
7
8
9
10
11<!-- nacos-discovery : 服务注册 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- (3)修改配置文件yaml
1
2
3
4
5
6
7
8
9
10server:
port: 9001
spring:
application:
name: nacos-provider-payment
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos web地址
- (4)主启动类
1
2
3
4
5
6
7
public class NacosProviderMain9001 {
public static void main(String[] args) {
SpringApplication.run(NacosProviderMain9001.class, args);
}
}
- (5)Controller层
1
2
3
4
5
6
7
8
9
10
11
12
public class NacosProviderController {
private String serverPort;
public String getPayment() {
return "nacos registry -- serverPort:" + serverPort;
}
}
- (6)测试:启动项目,访问nacos-web,”服务管理” -> “服务列表”
2.2 IDEA伪集群搭建
- 如果懒得重新创建一个项目来用集群搭建,可以通过修改IDEA参数来达到伪集群效果
2.3 消费者搭建nacos
- (1)创建项目
cloudAlibaba-consumer-nacos-order83
- (2)引入依赖
1
2
3
4
5
6
7
8
9
10<!-- nacos-discovery 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- (3)修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14server:
port: 83
spring:
application:
name: nacos-consumer-order
cloud:
nacos:
discovery:
server-addr: localhost:8848
#设置变量,去访问的微服务名称,用于解耦
service-url:
nacos-user-service: http://nacos-provider-payment
- (4)主启动类
1
2
3
4
5
6
7
public class NacosOrderMain83 {
public static void main(String[] args) {
SpringApplication.run(NacosOrderMain83.class, args);
}
}
- (5)Config类
1
2
3
4
5
6
7
8
9
10
public class ApplicationContextConfig {
//注入Bean
//开启负载均衡
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
- (6)Controller层
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class NacosOrderController {
//读取配置文件中变量信息,达到代码与配置解耦
private String serviceURL;
private RestTemplate restTemplate;
public String getPaymentInfo() {
return restTemplate.getForObject(serviceURL + "/payment/nacos", String.class);
}
}
- (7)测试,启动提供者服务,消费者服务,访问网址:http://localhost:83/consumer/payment/nacos , 查看是否成功负载均衡
2.4 服务注册中心对比
3 Nacos服务配置中心
3.1 基础配置
- (1)创建项目
cloudAlibaba-nacos-config-client3377
- (2)引入依赖
1
2
3
4
5
6
7
8
9
10<!-- 服务配置 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- (3)配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13# bootstrap.yaml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
config:
server-addr: localhost:8848 #nacos配置中心地址
file-extension: yaml #指定yaml格式的配置1
2
3
4
5# application.yaml
spring:
profiles:
active: dev # 选择开发环境
- (4)主启动类
1
2
3
4
5
6
public class NacosConfigClient3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClient3377.class, args);
}
}
- (5)Controller层
1
2
3
4
5
6
7
8
9
10
11
//支持Nacos的动态刷新功能
public class ConfigClientController {
private String configInfo;
public String getConfigInfo() {
return configInfo;
}
}
- (6)在Nacos中发布配置文件,”配置管理” -> “配置列表” -> “+”
- (7)启动服务,访问:http://localhost:3377/config/info , 数据成功访问
- 并且nacos支持动态刷新,不再需要我们手动发送消息去刷新配置
3.2 分类配置了解
- (1)Namespace+Group+Data ID三者关系
- 类似Java里面的package名和类名
- 最外层的namespace是可以用于区分部署环境,Group和DataID逻辑上区分两个目标对象
- 默认:Namespace=public,Group=DEFAULT_GROUP,Cluster=DEFAULT
- (2)具体功能使用
- Namespace主要用来实现隔离,比如说我们现在有三个环境:开发、测试、生产环境,我们可以创建是哪个Namespace,不同的Namespace之间是隔离的
- Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一分组里面去
- Service就是微服务,一个微服务可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比如说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,杭州机房起一个集群名为HZ,广州机房起一个集群名为GZ,还可以尽量让同一个机房的微服务滑翔调用,以提升性能
- Instance,微服务实例
3.3 分类配置
- (1)通过DataID切换文件
- 通过指定
spring.profile.active
和配置文件的DataID来使不同的环境下读取不同的文件
- 通过指定
- (2)通过GROUP切换文件
- (3)通过NameSpace切换文件
4 Nacos集群和持久化
- 持久化:https://nacos.io/zh-cn/docs/deployment.html
- 集群:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
4.1 持久化配置
- (1)nacos默认使用derby内嵌数据库来存储文件,例如我们之前的做配置中心的配置文件。为了持久化,我们可以将derby切换为我们自己的mysql数据库
- (2)nacos安装目录/conf/nacos-mysql.sql,创建名为
nacos_config
的数据库,运行此sql,得到我们的mysql数据库
- (3)也是在conf文件下,修改application.properties文件,迁移数据库
- (4)重启nacos,进入页面,发现之前配置的文件全部不见,证明配置成功
4.2 Linux环境搭建
集群的搭建在linux上,本人使用的linux为CentOS8
Java安装
JDK下载:https://www.oracle.com/cn/java/technologies/javase-downloads.html ,选择tar.gz文件
(1)上传到linux上,在/user目录下解压
sudo tar zxvf 解压文件
(2)配置环境
sudo vim /etc/profile
1
2
3export JAVA_HOME=/usr/jdk1.8.0_271-amd64
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin(3)加载配置
source /etc/profile
(4)检测是否安装成功
java -version
- Maven安装
- Maven下载:http://maven.apache.org/download.cgi ,选择bin.tar.gz文件
- (1)上传到linux上,在/user目录下解压
sudo tar zxvf 解压文件
- (2)配置环境
sudo vim /etc/profile
1
2export M2_HOME=/usr/apache-maven-3.6.3
export PATH=$PATH:$M2_HOME/bin - (3)加载配置
source /etc/profile
- (4)检测是否安装成功
mvn -v
- Nacos安装
- Nacos下载:https://github.com/alibaba/nacos/tags ,选择tar.gz文件
- 上传到linux,在/opt目录下解压
sudo tar -zxvf 解压文件
4.2 集群搭建
(1)数据持久化
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 登录mysql数据库
mysql -u root -p
# 创建nacos_config数据库
create database `nacos_config`
# 切换到nacos_config数据库
use `nacos_config`
# 运行sql文件
source /opt/nacos/conf/nacos-mysql.sql
# 检查是都创建表成功
show tables(2)切换数据库,修改application.properties
sudo vim /opt/nacos/conf/application.properties
修改内容与上文的数据持久化一样
- (3)集群配置
sduo cp /opt/nacos/conf/cluster.conf.example /opt/nacos/conf/cluster.conf
- 获取本机的ip地址
hostname -i
- 修改配置文件,
sudo /opt/nacos/conf/cluster.conf
- (4)编辑启动脚本,使其可以接受不同启动端口
sudo vim /opt/nacos/bin/startup.sh
- 可以尝试运行
sudo ./startup.sh -t 3333
- 若出现配置了JAVA_HOME环境,但报错说找不到,解决办法:https://blog.csdn.net/qq_29860591/article/details/106833134