第三次课:Nacos实现统一配置管理
分类: Java springboot 专栏: 分布式学习 标签: nacos配置管理
2023-06-13 00:24:45 1291浏览
前言

为啥要用到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)展开评论

新业务
springboot学习
ssm框架课
vue学习
【带小白】java基础速成