手把手学习Nacos
文章目录Nacos1.下载和如何启动Linux/Unix/MacWindows2.Linux安装Nacos3.写一个微服务注册到Nacos4.Nacos+OpenFeign实现服务间的调用5.Nacos的统一配置依赖:Nacos管理页面写配置服务的配置编写写一个测试接口启动,测试6.统一配置中心的几个概念命名空间:组Data Id7.配置文件的导出导入导出导入8.Nacos配置信息的数据持久化--
文章目录
Nacos
Name Configuration Service,微服务中的服务注册中心、统一配置中心
1.下载和如何启动
下载地址:https://github.com/alibaba/nacos/releases
我这里使用的是2.0.3版本
由于Github确实太慢,里面win、linux的nacos2.0.3都有,还有一个linux下1.4.2的nacos,大家选择下载,别整个文件下
链接:https://pan.baidu.com/s/1VwEU_q9c-X92RpcsmNDF3A
提取码:dddd
Windows、Linux如何启动?
Nacos官网:https://nacos.io/zh-cn/docs/quick-start.html
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
Windows
启动命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
2.Linux安装Nacos
因为nacos是用springboot写的,所以需要java环境,jdk8及以上,
Linux安装jdk8:https://blog.csdn.net/qq_42682745/article/details/120896261
安装完jdk之后,将安装包上传解压即可:
tar -xvf 你的安装包名
即可,
因为我是用的阿里的服务器,所以需要开放8848端口,重启服务器(Nacos的web端口),虚拟机的话需要关闭防火墙
进入到nacosd的bin目录下。执行如下命令,单机模式启动
./startup.sh -m standalone
如何关闭?
./shutdown.sh
访问:ip+8848/nacos/
我的:http://47.99.112.38:8848/nacos/
用户名、密码都是nacos
ok!
3.写一个微服务注册到Nacos
我们首先应该创建一个module作为父项目,它不写任何代码,只是用来管理SpringBoot、cloud、cloud alibaba的版本:pom如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring.cloud-version>Hoxton.SR8</spring.cloud-version>
<spring.cloud.aliyun-version>2.2.1.RELEASE</spring.cloud.aliyun-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.aliyun-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
新建module,空module作为父项目,引入依赖:
<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>
编写配置:
spring.application.name=NACOSTEST
server.port=9998
#服务器的nacos总地址
spring.cloud.nacos.server-addr=47.99.112.38:8848
注意:
上图中的配置才是注册地址的配置,可以看到它的默认值是spring.cloud.nacos.server-addr的值,所以我们配置spring.cloud.nacos.server-addr也可以。
上图的配置才是指定向nacos注册的服务的名字,可以看到它默认值是spring.application.name的值,所以我们写spring.application.name也行
运行查看:
注册成功
4.Nacos+OpenFeign实现服务间的调用
像上面一样再创建一个微服务,只是依赖需要加上openfeign
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency></dependencies>
先启动两个服务:都注册到nacos了
我们现在User调用Order服务,先给它两写接口:
用户服务使用OpenFeign调用订单服务:(两个启动类都加上@EnableFeignClients吧,它的作用是开启feign调用)
用户服务创建调用order的接口类:
用户服务的接口:
浏览器访问:
完成
5.Nacos的统一配置
我们知道,nacos既是注册中心也是配置中心
所以我们还需要引入nacos config的依赖,之前的是服务注册的依赖:
依赖:
<dependencies>
<!--nacos服务注册-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--nacos配置-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
Nacos管理页面写配置
点击发布即可
服务的配置编写
因为我们要让服务启动时知道去哪拉取配置、拉取什么配置,所以该配置文件必须是bootstrap的
#配置在哪spring.cloud.nacos.server-addr=47.99.112.38:8848#哪个组spring.cloud.nacos.config.group=xp#哪个文件,即dataidspring.cloud.nacos.config.name=nacos-prod#文件的后缀spring.cloud.nacos.config.file-extension=properties
还有一种配置写法:
#配置在哪spring.cloud.nacos.server-addr=47.99.112.38:8848#哪个组spring.cloud.nacos.config.group=xp#文件前缀spring.cloud.nacos.config.prefix=nacos#激活的环境spring.profiles.active=prod#文件的后缀spring.cloud.nacos.config.file-extension=properties
个人是觉得第一种好一些
写一个测试接口
我们不是在nacos的配置中配置了一个name吗,所以该接口就使用这个name,看配置拿到没有
@Value("${name}")
private String name;
@GetMapping("/test")
public String test(){
return name;
}
启动,测试
首先可以看到端口号是已经拿到了的,再看看name能不能拿到:
确实也拿到了
6.统一配置中心的几个概念
配置文件的历史版本,在历史版本菜单,需要搜索才能看到,它不会查询所有
命名空间:
简单来说就是配置文件的隔离,不同项目应有不同的命名空间
nacos默认命名空间是publi
新建了两个:
不同命名空间进行项目的配置管理。
如果要拉取你自己定义的命名空间的配置,就需要在配置文件中新增命名空间:
#配置在哪
spring.cloud.nacos.server-addr=47.99.112.38:8848
#哪个命名空间
spring.cloud.nacos.config.namespace=
#哪个组
spring.cloud.nacos.config.group=xp
#哪个文件,即dataid
spring.cloud.nacos.config.name=nacos-prod
#文件的后缀
spring.cloud.nacos.config.file-extension=properties
它的默认值就是public
组
简单来说就是对项目的拆分进行隔离,比如一个项目有多个微服务,比如用户服务、订单服务,就可以通过组来隔离配置文件
Data Id
配置文件的名字
7.配置文件的导出导入
导出
导出一个zip包
导入
将导出的压缩包导入即可,
选中压缩包即可
8.Nacos配置信息的数据持久化–mysql
它要求mysql版本5.6.5+,我们可以看下服务器的数据库版本:mysql -V
如果你的服务器没有mysql或者版本不够,可以参考我的linux安装mysql的文章:结尾附有如何彻底卸载mysql:https://blog.csdn.net/qq_42682745/article/details/120886092
(其中的命令请手动鼠标复制,不要点csdn的copy,那玩意复制后末尾自带换行符,粘贴到服务器上就直接执行了,不妥)
创建一个数据库,名字随意,必须为utf-8的编码
数据库初始化nacos-mysql.sql文件
这个sql文件在哪呢?在nacos的安装目录里,conf目录下
通过Xftp工具直接拖到本机上:
数据库右键,Execute SQL File,选择刚刚下载的sql文件
tables右键刷新即可:
修改nacos配置文件
还记得吗,nacos是springboot应用,它的配置文件叫application.properties,还是在conf目录下
vim application.properties
找到mysql的配置
:set nu 开启行号
按下 i 或者insert键进入编辑模式
Esc退出编辑
:wq 保存并退出
:q 退出
其余不用改,保存退出即可,重启nacos
可以看到现在config_info的表是没有数据的,我们现在去nacos上添加一个配置看看
ok,确实保存到mysql了
Nacos集群搭建
前言:
这里是官网的一张图:
DNS,不用说了吧域名服务器(域名----->ip)
SLB?Server Loadbalance 负载均衡服务器
为什么nacos集群需要这样架构呢?
这里是我们要配置的nacos服务地址对吧,既然做了集群了,我们不可能在配置文件中写死一个地址啊,其它服务地址岂不是没用了。所以在集群环境下,上面的这个配置应该写负载均衡服务的地址,负载均衡简单呀,Nginx。好了既然是写负载均衡的地址,那我总能写ip+端口了吧?当然也可以,但是如果后续ip发生变化,就涉及到改代码了。所以最好的方式是这个配置写域名,这也是为什么要加DNS的原因。
集群条件:
目前学习阶段满足框起来的3个即可
你需要准备的:
- 至少一个mysql服务
- 3台服务器或者起虚拟机(nacos占内存,一个大约要准备0.5G,可一个虚拟机开3个不同端口的Nacos),我这里就用三台服务器。
- 一个nginx服务
步骤:
-
准备好环境,一个mysql、nginx、跑三个nacos
-
删除最初的nacos数据库,重新执行sql文件,因为集群是要求不能有数据的
-
修改appliacation.properties配置文件的mysql,开启并修改为你的mysql(三个nacos都要改)
-
创建修改cluster.conf配置文件(这两个文件都在conf下),把所有的集群节点都写进去
这是cluster.conf.example,示例:(该步骤同样三个nacos都要改)
我们只需要将这个文件复制、重命名即可,命令如下:
cp cluster.conf.example ./cluster.conf
接下来修改配置:
vim cluster.conf
按 i 或者 insert键进入编辑模式、Esc退出编辑模式、非编辑模式输入 :wq 保存退出 :q 退出
vim下是不能使用小键盘的哦!
我们需要将三个nacos的地址都写在里面(ip+端口),根据你的地址来写,然后将这个复制到其它两台nacos的cluster.conf中即可
Ctrl+Insert 复制 Shift+Insert 粘贴
- 启动nacos,如果已经启动请先关闭,再启动
现在我们启动nacos就不能使用 ./startup.sh -m standalone这种方式了,这种是单机启动,nacos默认是集群启动,所以
./startup.sh
就行了,三个都启起来
两个G啊兄弟们,一台服务器只能跑一个集群模式的nacos,无奈,我只有把有台服务器的项目都停了
卧槽,关到只剩mysql了(这台服务器附带跑MySQL,任务艰巨),都还是不行,没办法,服务器就只有2G内存,我们可以去Nacos的启动脚本看看,它的jvm参数:
进入nacos的bin目录
vim startup.sh
如图
只能把它集群启动的堆大小改小一点了,哈哈,试试1.5g。2G只是nacos运行比较稳,我们也只是学习的时候用,2G肯定绰绰绰绰有余,改成1.5试试
需要把g换算为m!!!!!!!!
-Xms、-Xmx 保持一致即可(至于为啥?可以搜一下),-Xmn新生代,根据你减少了多少堆内存做相应减少即可,2-----1.5 我把它从1变为了0.8,我们这也不是生产环境不必那么精细。
保存,启动
果然没跑起来,一直staring,估计还是内存问题,换成1G还是不行,算了,有机会再补上吧
B站视频:https://www.bilibili.com/video/BV1S5411c7hM?p=62
虽然有一台没有启动成功,但是集群我们是搭建成功了的,可以看
它会在本机的cluster.conf里面自己加上内网地址
对了,nacos是部署到内网的,极极极其不推荐放到公网上,这里只是为了方便学习
更多推荐
所有评论(0)