Nacos配置和集群
一 统一配置管理
Nacos官方文档
1.配置热更新
1.新建配置文件
在Nacos的配置列表中新建一个配置文件。
注意事项:
Data ID 命名规则:一般情况下使用使用 “微服务名称+运行环境” 作为DataID,后缀名建议使用文件后缀全名,例如:yaml
Group:分组名称,根据事情需求修改。
配置内容:按照所选配置格式编写即可。尽可能的配置一些有热更新需求的参数。一般用于服务中的开关配置或模板配置。
2.读取配置文件
1.引入Nacos的配置管理客户端config依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
或者在通过 Spring Ini创建项目时直接勾选
2.创建 bootstrap.yml
在 项目中的resources文件夹下创建bootstrap.yml文件,bootstrap.yml 叫做引导文件,先于application.yml 执行。
spring:
application:
name: alibaba-order # 服务名称
profiles:
active: dev #运行环境
cloud:
nacos:
server-addr: http://localhost:8848 # nacos地址
config:
file-extension: yaml # 文件后缀名
配置完成之后,本地配置文件中的相同配置即可直接去掉。
3.设置细节
配置文件名(Data ID)一般以微服务名称为准,在多环境时,则以"微服务名-环境名"作为配置文件名。
例如配置文件名为"alibaba-order-dev.yaml",则配置文件内容应该如下:
spring:
application:
name: alibaba-order # 服务名称
profiles:
active: dev #运行环境
cloud:
nacos:
server-addr: http://localhost:8848 # nacos地址
config:
file-extension: yaml # 文件后缀名
discovery:
namespace: public
username: nacos
password: nacos
cluster-name: xian
# 设置该实例为非临时实例
#ephemeral: false
3.配置自动刷新
Nacos中的统一配置管理文件修改以后,无需重启服务即可实现自动更新。需要通过一下两种方式实现。
1.在使用了相关值的控制器类上添加 @RefreshScope 注解
2.使用 @ConfigurationProperties 注解
@Component
@Data
@ConfigurationProperties("systems")
public class YamlConfig {
private String os;
}
然后在控制器类中使用依赖注入即可
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private YamlConfig yamlConfig;
@GetMapping
public String get(){
//return "123";
return yamlConfig.getOs();
}
}
推荐使用 @ConfigurationProperties 注解的方式实现配置自动刷新
4.多环境配置共享
无论环境如何变化,以服务名称命名的配置文件总是被多个环境共享。
例如 alibaba-order-dev.yaml 和 alibaba-order.yaml。alibaba-order-dev.yaml仅在dev环境下生效,而 alibaba-order.yaml 在全部环境下均有效。
开发环境中使用多环境测试时,可通过修改服务的配置信息来实现多环境的模拟。
5.配置文件优先级
统一配置管理中,若存在相同的配置属性,则它们是按照一定的优先级来实现加载。
指定环境 > 环境共享 > 本地
二 Nacos集群搭建
1.Nacos集群框架图
2.Nacos集群实现
1.初始化数据库
创建一个名为 nacos 的数据库,编码格式为 utf8。
下载nacos,在nacos根目录下的conf文件夹内,找到 nacos-mysql.sql 文件,运行至mysql。
2.编辑配置文件
更改 cluster.conf.example 文件名为 cluster.conf
编辑 cluster.conf 文件,模拟3台服务器的Nacos地址
192.168.16.191:8845
192.168.16.191:8846
192.168.16.191:8847
编辑 application.properties 文件,设置数据库相关信息及服务端口信息
server.port=8845
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?characterEncoding=utf8&serverTimezone=UTC
db.user.0=root
db.password.0=123456
然后将nacos复制3份,分别修改 server.port 的端口值为 cluster.conf 文件中设置的端口值,如果服务器不一样时,端口号则可以保持一致。
最后分别启动Nacos服务,启动成功以后,配置Nginx。
#配置nacos集群
upstream nacos-cluster {
server 127.0.0.1:8845;
server 127.0.0.1:8846;
server 127.0.0.1:8847;
}
server {
listen 8848;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
最后运行Nginx,在浏览器访问即可。