第三次课:Nacos实现统一配置管理
分类: Java springboot 专栏: 分布式学习 标签: nacos配置管理
2023-06-13 00:24:45 986浏览
前言
为啥要用到nacos的统一配置管理?之前的传统方式存在的问题
- 配置文件的数量会随着服务的增加持续增加
- 修改配置文件后必须还得重启
- 单个配置文件无法区分多个运行环境
配置中心解决了什么问题?
- 统一配置文件管理
- 提供统一标准接口,服务根据标准接口自行拉取配置
- 支持动态更新的到所有服务
- 解决重复配置问题
举例说明:
比如,我们有三个微服务,都会使用到Redis,那么就需要配置Redis的连接信息,怎么办?
将redis的连接信息放在Nacos的配置中心之中,所有的微服务只需要配置Redis的配置引用就可以了。这样可以统一管理Redis的配置,无需增加额外的辅助。
配置中心本质:
域模型
springboot项目使用nacos
依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.7.RELEASE</version> </dependency>
微服务配置文件
直接把之前在本地写的配置文件放到nacos配置中心。命名格式:微服务的名字.yaml。只要配置了nacos的配置中心,默认就会找这个文件
server: port: 80 spring: cloud: nacos: discovery: server-addr: localhost:8848 ip: 127.0.0.1 cluster-name: BJ # namespace: b24e3af7-aeb9-431f-a5ba-12f8b618bdb1 application: name: order-service datasource: url: jdbc:mysql://localhost:3306/cloud-order?serverTimezone=Asia/Shanghai username: root password: 123456 user-service: #要做配置的微服务名称 ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
spring: application: name: order-service cloud: nacos: config: file-extension: yaml # 指定远程配置文件格式 namespace: b24e3af7-aeb9-431f-a5ba-12f8b618bdb1 # 命令空间,当多个环境使用同一个nacos管理时,用于隔离不同的环境,命令空间需要配置在nacos中配置的命令空间ID server-addr: localhost:8848 # nacos的服务地址
拆分配置文件-针对某个微服务
在Nacos添加配置时,需要注意一下Data ID的配置,它的规则是:微服务的名称-profile.yaml
spring: cloud: nacos: discovery: server-addr: localhost:8848 ip: 127.0.0.1 cluster-name: BJ namespace: b24e3af7-aeb9-431f-a5ba-12f8b618bdb1 user-service: #要做配置的微服务名称 ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
spring: application: name: order-service profiles: active: reg,mysql cloud: nacos: config: file-extension: yaml # 指定远程配置文件格式 namespace: b24e3af7-aeb9-431f-a5ba-12f8b618bdb1 # 命令空间,当多个环境使用同一个nacos管理时,用于隔离不同的环境,命令空间需要配置在nacos中配置的命令空间ID server-addr: localhost:8848 # nacos的服务地址
多服务共享配置
有的配置可能是多个微服务用的同样的配置,为了防止重复操作,就可以抽取出来玩。可以随意取名。
比如:order-service 和user-service都属于一个团队开发的,teamName: jfit
team: name: jfit
spring: application: name: user-service profiles: active: reg,mysql cloud: nacos: config: shared-configs: # 在这里配置共享配置 - dataId: order-user.yaml refresh: true #不加这个会导致修改配置不更新 group: DEFAULT_GROUP file-extension: yaml # 指定远程配置文件格式 namespace: b24e3af7-aeb9-431f-a5ba-12f8b618bdb1 # 命令空间,当多个环境使用同一个nacos管理时,用于隔离不同的环境,命令空间需要配置在nacos中配置的命令空间ID server-addr: localhost:8848 # nacos的服务地址
多种配置的优先级
服务名-profile.yaml > 服务名称.yaml >跨本地配置
配置热更新
Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现
- 方式一:在@Value注入的变量所在类上添加注解@RefreshScope
- 方式二:使用@ConfigurationProperties注解
@Component @ConfigurationProperties(prefix = "team") @Data public class SysProperties { String name; }
配置nacos集群
MySQL建库建表
修改cluster.conf文件
修改application.properties
复制三份修改端口
记得修改端口
启动三个nacos
注意:set MODE="cluster"
修改nginx配置并启动
upstream nacos-cluster { server 127.0.0.1:8851; server 127.0.0.1:8853; server 127.0.0.1:8855; } server { listen 80; server_name localhost; location /nacos { proxy_pass http://nacos-cluster; } }
注意事项
端口占用问题:集群三个端口不要连续且四位数
nacos的集群配置文件里的ip要写成内网IP
另外就是版本问题:boot版本 2.3.7.RELEASE
nacos版本:2.0.3
springcloud-alibaba版本:2.2.1.RELEASE
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.7.RELEASE</version> </parent> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.1.RELEASE</version> </dependency>
好博客就要一起分享哦!分享海报
此处可发布评论
评论(6)展开评论