文章目录
服务注册和配置中心的组合
Nacos=erueka+config+bus
Nacos官网地址:https://nacos.io/zh-cn/,可以在这里下载和查阅官方文档。
各种服务注册中心的比较
服务注册与服务发现框架 | CAP模型 | 控制台管理 | 社区活跃度 |
---|---|---|---|
Eureka | AP | 支持 | 低(2.x版本闭源) |
Zookeeper | CP | 不支持 | 中 |
Consul | CP | 支持 | 高 |
Nacos | AP | 支持 | 高 |
1.1 安装Nacos
1.1.1 Windows安装
通过github下载Nacos下载地址选择合适的版本(最好选稳定版本)下载zip包,需要本地配置好了Java8和Maven环境,解压缩后,运行startup.cmd启动Nacos,浏览器访问http://localhost:8848/nacos
查看管理后台,输入用户名密码(都是nacos)进入。
启动Nacos(后台cmd窗口服务开启)
在bin下,进入cmd
./startup.cmd
访问Nacos(前台可视化界面访问)
Nacos默认监听8848
访问地址:http://localhost:8848/nacos
账号和密码:默认都是nacos
1.2 使用Nacos(服务注册中心Eureak)
1.21 基于Nacos的服务提供者9001
新建cloudalibaba-provider-payment9001模块,在父pom.xml的dependencyManagement坐标的dependencies中加入spring-cloud-alibaba-dependencies坐标。
现在不需要额外的服务注册模块了,Nacos单独启动了
父项目管理alibaba的依赖:
(1)9001生产者pom.xml
修改子模块的pom.xml,加入``spring-cloud-starter-alibaba-nacos-discovery`坐标。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud2020</artifactId>
<groupId>com.atguigu.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloudalibaba-provider-payment9001</artifactId>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
(2)9001yam配置文件
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos服务注册中心地址,
#对外暴露的监控
management:
endpoints:
web:
exposure:
include: '*'
(3)9001启动类
添加主启动类,带上@EnableDiscoveryClient
用于开启服务发现功能
(4)9001 controller:
(5)测试
启动Nacos,启动生产者9001模块访问http://192.168.232.1:8848/nacos
,点击左侧“服务管理”-“服务列表”即可看到Provider9001服务已经注册进来了。(很奇怪,这些IP地址都可以访问到nacos客户端)
Nacos自带负载均衡,为了演示负载均衡,仿照cloudalibaba-provider-payment9001模块创建cloudalibaba-provider-payment9002模块,端口号做相应的修改即可,其他大致相同。
创建完成后,启动Provider9002,查看Nacos管理后台,nacos-payment-provider服务名对应的实例数由1变成了2。
1.22 基于Nacos的消费者模块83
官方文档:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_start_a_consumer_application
新建cloudalibaba-consumer-nacos-order83模块,pom.xml和cloudalibaba-provider-payment9001一样。添加application.yml。
(1)83 pom.xml与9001一样
为什么Nacos支持负载均衡?
Nacos直接集成了Ribon,所以有负载均衡
(2)yaml 83配置文件
这个server-url的作用是,我们在controller,需要使用RestTempalte远程调用9001,
这里是指定9001的地址
(3)主启动类
(4)编写配置类
nacos和eureka一样,内部都集成了ribbon,所以不用单独导入ribbon依赖,就实现负载均衡了。
因为Naocs要使用Ribbon进行负载均衡,那么就需要使用RestTemplate
(5)controller:
这里的serverURL直接@value
从yaml里面引入,不需要像之前一样再定义变量。
(6)测试
启动83,访问9001,9002,可以看到,实现了负载均衡
输入:http://localhost:83/consumer/payment/nacos/1
1.3 Nacos与其他服务注册的对比
Nacos它既可以支持CP,也可以支持AP,可以切换
下面这个curl命令,就是切换模式
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
1.4 使用Nacos作为配置中心(Config)
需要创建配置中心的客户端模块(3377)
新建cloudalibaba-config-nacos-client3377模块,修改pom.xml,加入spring-cloud-starter-alibaba-nacos-config
和spring-cloud-starter-alibaba-nacos-discovery
坐标。
这里的服务配置的 服务端配置中心是Nacos; 配置中心的客户端是3377微服务模块
(1)3377 pom.xml
在9001的基础上添加spring-cloud-starter-alibaba-nacos-config
服务配置中心的依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
(2)yaml 3377配置文件
3377模块需要配置两个yaml文件,application.yml和bootstrap.yml
主要是为了可以与spring clodu config无缝迁移
(3)主启动类
(4)controller
这里的config.info是在Nacos中配置的内容的标签,相当于与之前的GitHub上设置的标签一样。
这样就可以获取远程仓库的内容。
可以看到,这里也添加了@RefreshScope
之前在Config配置中心,也是添加这个注解实现动态刷新的
(5)在Nacos服务配置中心添加配置信息
Nacos的配置规则:
配置规则,就是我们在客户端如何指定读取配置文件,配置文件的命名的规则
DataId默认的命名方式:
prefix:
默认就是当前服务的服务名称
也可以通过spring.cloud.necos.config.prefix配置
spring.profile.active:
就是我们在application.yml中指定的,当前是开发环境还是测试等环境
这个可以不配置,如果不配置,那么前面的 - 也会没有
file-extension
就是当前文件的格式(后缀),目前只支持yml和properties
在web UI上创建配置文件:(相当于GitHub和配置中心服务端结合在一起)
添加Data ID:这个配置要与bootstrap.yml一一对应
注意,DataId就是配置文件名字:
名字一定要按照上面的规则命名,否则客户端会读取不到配置文件
(6)测试
重启3377客户端
访问3377:http://localhost:3377/config/info
拿到了配置文件中的值
1.5 注意默认就开启了自动刷新(不用在bus服务总线了)
此时我们修改了配置文件
客户端是可以立即更新的
因为Nacos支持Bus总线,会自动发送命令更新所有客户端
1.6 Nacos配置中心之分类配置
NameSpace默认有一个:public名称空间
这三个类似java的: 包名 + 类名 + 方法名
1,配置不同DataId
通过配置文件,实现多环境的读取:
此时,改为dev,就会读取dev的配置文件,改为test,就会读取test的配置文件
2,配置不同的GroupID:
直接在新建配置文件时指定组
在客户端配置,使用指定组的配置文件:
这两个配置文件都要修改
重启服务,即可
3. 配置不同的namespace:
==客户端配置使用不同名称空间:==需要配置 命名空间ID
要通过命名空间id指定
OK,测试
1.7 Nacos集群和持久化配置
Nacos默认有自带嵌入式数据库,derby,但是如果做集群模式的话,就不能使用自己的数据库
不然每个节点一个数据库,那么数据就不统一了,需要使用外部的mysql
1,单机版,切换mysql数据库:(windows配置)
将切换到使用我们自己的mysql数据库:
1,nacos默认自带了一个sql文件,在nacos安装目录下,/conf目录 nacos-mysql.sql
将它放到我们的mysql执行创建数据库
2,修改Nacos安装目录下 /conf目录 application.properties,添加:
#**********************切换到mysql数据库***********************#
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?useUnicode=true&charcaterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
db.user=root
db.password=jh7851192
3,此时可以重启nacos,那么就会改为使用我们自己的mysql
Linux上配置Nacos集群+Mysql数据库
官方架构图:
需要一个Nginx作为VIP
1,下载安装Nacos的Linux版安装包
(1)将压缩包放在 cd /usr/src目录下,并解压:tar -zxvf nacosxxxxx
(2)为了操作,建议备份文件:cp -r nacos /mynacos/
2,进入 nacos 安装目录 conf 文件下,找到 nacos-mysql.sql 脚本
。
创建 nacos_config 数据库,并执行 nacos-mysql.sql 脚本。
和windos操作差不多,直接复制该sql文件到Linux下的mysql数据库,进入mysql,执行sql文件。
Linux下载mysql(遇到Linux磁盘空间不足,按照这篇文章配置扩展空间https://www.pianshen.com/article/99111626893/)
解压过程也分为两层:xz -d mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz,之后就会出现mysql-8.0.18-linux-glibc2.12-x86_64.tar文件
然后tar xvf mysql-8.0.18-linux-glibc2.12-x86_64.tar即可完成解压.
启动mysql: service mysql start
改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
进入mysql:./mysql -u root -p
3.修改配置文件conf,切换为我们的mysql
就是上面windos版要修改的几个属性
(1)在mysql上创建nacos_config数据库并建表,和Windows操作一样
(2)备份:cp application.properties application.properties.bk
然后vim application.properties
4,修改cluster.conf,指定哪几个节点是Nacos集群
(1)在conf目录下,输入cp cluster.conf.example cluster.conf,复制集群备份文件
(2)查看linux下的IP地址(不要写 127.0.0.1,必须是Linux的真实IP):ifconfig,192.168.146.129
(3)修改vim cluster.conf
这里使用3333,4444,5555作为三个Nacos节点监听的端口(3个构成集群)
5,编辑startup.sh启动文件
(1)备份文件 cp startup.sh startup.sh.bk
既然要在一个节点上启动不同Nacos实例,就要修改startup.sh,使其根据不同端口启动不同Nacos实例
vim startup.sh进入编辑
可以看到,这个脚本就是通过jvm启动nacos
所以我们最后修改的就是,nohup java -Dserver.port=3344
bin目录下启动命令: ./startup.sh -p 3333/4444/5555
6,配置Nginx:( /usr/local/nginx/conf/nginx.conf)
修改nginx.conf文件如下:
-
监听端口直接用80吧,原先用1111端口错误,蓝色框一定要对应名称,否则访问不到;
-
如果 用其他端口 建议开启防火墙端口不屏蔽(或者直接关闭防火墙)
7,启动Nacos:
./startup.sh -p 3333
./startup.sh -p 4444
./startup.sh -p 5555
如果想关闭的话,Nacos关闭服务,切换到bin目录,执行命令:sh shutdown.sh
7,启动nginx
配置完成,进入 sbin 目录,使用 ./nginx -c /usr/local/env/nginx-1.16.0/conf/nginx.conf
启动 nginx,使用 -c
加载指定配置文件,路径为 nginx.conf 所在路径。启动完成,通过命令:ps aux | grep nginx
查看 nginx 是否启动。
8,测试:
访问http://192.168.146.129:80/nacos/#/login
(192.168.146.129:80代表nginx.conf下server的访问路径)
如果可以进入nacos的web界面,就证明安装成功了
集群nacos3333/4444开启后,就通过nginx访问到nacos集群了,然后nacos的数据库也切换到mysql了
9,将微服务注册到Nacos集群:
server:
port: 9003
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: 192.168.146.129:80 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
10,进入Nacos的web界面
可以看到,已经注册成功