前置内容
1、SpringCloud Alibaba简介和Nacos【注册中心】
1. 建Module
Module
的名称为cloudalibaba-config-nacos-client3377
2. 改POM
<dependencies>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--web + actuator-->
<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>
3. 改YML
(1)、application.yaml
spring:
profiles:
active: dev
(2)、bootstrap.yaml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
bootstrap.yaml
的原因:Nacos
通SpringCloud-config
一样,在项目初始化时候,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动,springboot
中配置文件的加载是存在优先级顺序的,bootstrap
优先级高于application
。4. 主启动
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class,args);
}
}
5. 业务类
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
@RefreshScope
实现动态刷新6. 再Nacos添加配置信息
DataId
= ${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
配置7. 测试结果
(1)、直接测试
(2)、修改version后测试
8. 最后的包结构
Java
里面的package
和类名。namespace
是可以用于区分部署环境的,Group
和DataId
逻辑上区分两个目标对象。Namespace
的命名空间是public
,Namespace
主要用来实现隔离。Group
默认是DEFAULT_GROUP
,Group
可以把不同的微服务划分到同一个分组里面去。Service
就是微服务,一个Service
可以包含多个Cluster
(集群),Nacos
默认Cluster
是DEFAULT
,Cluster
是对指定微服务的一个虚拟划分。Instance
,就是微服务的实例。1. 添加配置信息
2. 在上面案例前提下修改application.yaml
spring:
profiles:
active: test
#active: dev
3. 测试结果
1. 添加新的配置信息
2. 修改两个yaml文件
(1)、bootstrap.yaml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
group: TEST_GROUP
# nacos-config-client-dev.yaml
(2)、application.yaml
spring:
profiles:
active: info
#active: dev
3. 测试结果
1. 添加新的配置信息
config:
info: 0b13fe62-4a9c-4b8b-929a-168ff189a149,DEFAULT_GROUP,nacos-config-client-dev.yaml
2. 修改两个yaml文件
(1)、application.yaml
spring:
profiles:
# active: info
active: dev
(2)、bootstrap.yaml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
group: DEFAULT_GROUP
namespace: 0b13fe62-4a9c-4b8b-929a-168ff189a149
3. 测试结果
(1)、Group为DEV_GROUP时
(2)、Group为DEFAULT_GROUP时
1. 官网架构图
2. 对官网架构图的说明
VIP
是虚拟IP
的集群,也就是所谓的NGINX
集群。Nacos
都有一个默认的数据库derby
。但是如果我们搭建Nacos
集群的话,那么这样会导致数据不一致的问题。所以我们需要将数据库从derby
转换为MySQL
。配置步骤
1. 找到如图所示目录的sql文件
MySQL
的数据库中执行。2. 修改application.properties文件
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow
1
个nginx
+3
个nacos
注册中心+1
个mysql
。nacos-server-1.1.4.tar.gz
解压并安装1. Linux服务器上mysql数据库配置
将nacos.mysql.sql
文件在mysql
上执行。
2. 修改application.properties文件
application.properties.example
拷贝一份重命名为application.properties
。然后对application.properties
进行修改。spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.123.129:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
3. Linux服务器上nacos的集群配置cluster.conf
cluster.conf.example
拷贝一份重命名为cluster.conf
。然后对cluster.conf
进行修改。192.168.123.129: 3333
192.168.123.129: 4444
192.168.123.129: 5555
IP
不能写127.0.0.1
,必须是Linux
命令hostname -i
能够识别的IP
。4.编辑Nacos的启动脚本startup.sh,使它能够接受不同的启动端
while getopts ":m:f:s:" opt
do
case $opt in
m)
MODE=$OPTARG;;
f)
FUNCTION_MODE=$OPTARG;;
s)
SERVER=$OPTARG;;
p)
PORT=$OPTARG;;
?)
echo "Unknown parameter"
exit 1;;
esac
done
# start
echo "$JAVA ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &
nohup $JAVA Dserver.port=${port} ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
echo "nacos is starting,you can check the ${BASE_DIR}/logs/start.out"
启动方式
./startup.sh -p 端口号
5.Nginx的配置,由它作为负载均衡器
nginx.conf
。upstream cluster{
server 127.0.0.1:3333;
server 127.0.0.1:4444;
server 127.0.0.1:5555;
}
server{
listen 1111;
server_name localhost;
location /{
proxy_pass http://cluster;
}
}
# 启动nginx
./nginx -c /usr/local/nginx/conf/nginx.conf
6. 修改服务提供者的yaml文件及测试
server-addr: 写你自己的虚拟机ip:1111
7. 小结
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_56727438/article/details/122571753
内容来源于网络,如有侵权,请联系作者删除!