SpringCloud集成Nacos注册中心和配置中心
1.下载Nacos
选择自己系统对应的版本
2.安装Nacos(Linux)
1.解压
将下载的安装包上传至服务器指定位置
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
2.修改配置文件
新建数据库,导入nacos所需表数据
cd nacos/conf
将目录下两个sql文件导入准备好的数据库中
注意mysql版本要求5.6版本以上,否则不支持current_timestamp作为datetime的默认值
修改配置文件
vim application.properties
修改nacos服务端口号(可不改,根据自己需求)
修改数据库配置
3.启动服务
cd ../bin
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
Windows
启动命令(standalone代表着单机模式运行,非集群模式):
cmd startup.cmd -m standalone
单机启动时如果sh startup.sh 启动失败可以修改配置文件
修改配置文件单机启动
vim startup,sh
1)单机模式启动:
修改bin
目录下的startup.cmd
文件,将set MODE="cluster"
一行改成set MODE="standalone"
,然后直接运行startup.cmd
。运行成功后,访问http://localhost:8848/nacos可以查看Nacos
的主页,默认账号密码都是nacos。
(2)数据库集群模式启动:
i)在MySQL中新建数据库:
- 库名:nacos_config
- 字符集:utf8 — UTF-8 Unicode
- 排序规则:utf8_general_ci
ii)将nacos/conf/nacos-mysql.sql
文件里的sql脚本执行到上面新建的数据库中。
iii)修改nacos/conf/application.properties
配置文件,修改以下几项:
12345678910 | ### If use MySQL as datasource:spring.datasource.platform=mysql ### Count of DB:db.num=1 ### Connect URL of DB:db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?autoReconnect=true&connectTimeout=1000&socketTimeout=3000&useUnicode=true&characterEncoding=utf-8&failOverReadOnly=false&useSSL=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghaidb.user=rootdb.password=root |
---|---|
iv)维持bin
目录下的startup.cmd
文件中的set MODE="cluster"
这一行不变,然后将nacos/conf/cluster.conf.example
文件复制一份改名为cluster.conf
,但是要保持里面内容为空。
需要注意的是,这一步骤不能省略也不能出错。如果没有
cluster.conf
文件在启动时就会出现本篇文章标题中的那个错误;如果cluster.conf
文件中添加了服务地址,后续可能导致服务没法注册到Nacos
,爆java.net.SocketTimeoutException: Read timed out错误。具体原因我看了下nacos-1.3.2
的源码,应该是com.alibaba.nacos.naming.web.DistroFilter#doFilter
方法的处理逻辑有些问题,如果cluster.conf
文件存在服务地址,可能导致无限循环转发请求,然后就出现前面那个java.net.SocketTimeoutException: Read timed out错误了。切记切记!
v)启动bin
目录下的startup.cmd
文件,启动成功之后效果如下:
运行成功后,访问http://localhost:8848/nacos可以查看Nacos
的主页,默认账号密码都是nacos。
3.设置nacos命名空间
nacos命名空间可以理解为配置各个环境,个人喜欢划分为dev、test、prd,空间ID可以不设置会自动生成,项目配置环境时会用到
新建完成后可以在配置管理里面看到刚刚新建的各个空间
4.新建配置文件
配置管理>配置列表>右上角新建按钮
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
${prefix}-${spring.profiles.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
类型。
Group个人喜欢以项目名为分组,可以默认
配置格式个人习惯使用YAML
配置内容可以将项目汇总的application.yml直接粘贴进来,保存的时候有格式校验,注意修改!
5.项目配置
1.新建bootstrap.yml配置文件
使用Nacos必须使用bootstrap.yml作为nacos配置文件,否则无法加载配置
目前分为dev和test环境所以新建bootstrap-dev.yml和bootstrap-test.yml
2.修改配置文件
test环境类型,对应修改相对应的group和namespace
3.修改IDEA启动参数
Run -> Edit CommonApplication
选择对应服务指定启动环境
4.添加maven依赖和修改启动类
4.1 maven添加maven依赖
在pom文件中添加nacos依赖
<!--配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${nacos-version}</version>
</dependency>
<!--注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${nacos-version}</version>
</dependency>
<!--加载bootstrao.yml配置文件->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
5.服务器部署
新建 xxx.sh
touch xxx.sh
vim xxx.sh
将下面内容复制进去
#!/bin/sh
#date:2020-12-12;
#author:LHN
#此处修改脚本名称:
APP_NAME=demo-0.0.1-SNAPSHOT.jar
#脚本菜单项
usage() {
echo "Usage: sh tf.sh [start|stop|restart|status|log]"
exit 1
}
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动脚本
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
#此处注意修改jar和log文件文件位置:
nohup java -jar /home/manage/$APP_NAME --spring.profiles.active=test >/dev/null &
#此处打印log日志:
#tail -f /home/manage/logs/manage.demo.log
fi
}
#停止脚本
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#显示当前jar运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#打印日志
log(){
#此处打印log日志:注意修改日志文件目录
tail -f /home/manage/logs/manage.demo.log
}
#重启脚本
restart(){
stop
start
}
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
"log")
log
;;
*)
usage
;;
esac
6.启动服务
sh xxx.sh start //启动
sh xxx.sh log //日志
sh xxx.sh restart //重启
sh xxx.sh stop //停止
服务启动后服务管理>服务列表中对应的空间中可以查看对应的服务
完美与swagger融合