第三次课:Nacos实现统一配置管理

飞一样的编程
飞一样的编程
擅长邻域:Java,MySQL,Linux,nginx,springboot,mongodb,微信小程序,vue

分类: Java springboot 专栏: 分布式学习 标签: nacos配置管理

2023-06-13 00:24:45 986浏览

nacos配置管理

前言

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

周杰伦 能力:10

2023-06-14 13:48:22

按时完成作业
蓝色妖姬 能力:10

2023-06-14 11:26:13

已完成
绿你奇迹 能力:10

2023-06-13 15:36:42

知识点很全面!!!
少奇 能力:10

2023-06-13 08:47:44

实训56刘少龙实名 预习
蓝色妖姬 能力:10

2023-06-13 08:37:57

实训56班李灿实名 预习中
能力:10

2023-06-13 08:00:40

实训56骆烂实名观看
点击查看更多评论

展开评论

您可能感兴趣的博客

客服QQ 1913284695