Bootstrap

微服务学习-Nacos 作为配置中心动态管理

Nacos 作为配置中心使用

1. 作用

配置中心就是一种统一管理应用配置的基础服务组件。

2. 微服务为什么需要配置中心

在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就很分散,不仅如此,分散中还包含着冗余。

配置中心就是一种统一管理各种应用配置的基础服务组件。配置中心的出现,可以解决这些问题,使得配置信息集中管理,易于维护,并且可以动态更新配置,使得分布式系统更加稳定可靠。

一个微服务一个 application.yml,如果 100 个微服务就会有 100 个 application.yml,如果注册中心地址发生了变化,想象一下怎么改配置。

配置中心使得配置信息集中管理,易于维护,并且可以动态更新配置。

3. Nacos 作为配置中心怎么用

官方参考文档:快速开始-阿里云Spring Cloud Alibaba官网

3.1. Nacos 配置中心配置方法的变化

在 SpringBoot2.4 这个大版本中一项非常重要的改动:出于对云原生多配置文件的支持,默认关闭了对 bootstrap.yml 的使用。

解决方案:

方案一:重新启用 bootstrap.yml(不推荐)

方案二:使用 spring.config.import(官方推荐)

spring:
  config:
    import:
      - optional:nacos:${spring.application.name}.yml
      - optional:nacos:db-common.yml    #公共配置

spring.config.import: - optional:nacos:icoolkj-mall-order.yml:这一行是 Spring Boot 2.4.0 及以上版本引入的配置文件导入机制。optional:nacos:icoolkj-mall-order.yml 表示从 Nacos 配置中心导入名为 icoolkj-mall-order.yml 的配置文件,其中 optional 关键字意味着如果该配置文件在 Nacos 中不存在,那么 Spring Boot 将不会抛出异常,而是继续执行后续的初始化流程。

3.2. 订单服务整合 Nacos 配置中心

目标:把微服务中公共的配置抽取出来统一管理配置,例如订单服务的注册中心配置和数据库公共配置可以抽取出来。

3.2.1. 在 Nacos 控制台创建 dataId(对应 spring.config.import 指定的配置文件名称)

抽取 application.yml 中配置信息,配置到 Nacos 指定的 dataId 文件中

公共配置:nacos-discovery.yml db-myslq-common.yml

spring:
  cloud:
    nacos:
      discovery:
        server-addr: icoolkj-mall-nacos-server:8848
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: icoolDP1988

mybatis:
  configuration:
    map-underscore-to-camel-case: true
    #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

订单服务自己的配置 icoolkj-mall-order.yml

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mall-order?useSSL=false&characterEncoding=utf8
  cloud:
    loadbalancer:
      nacos:
        enabled: true

同时订单服务的 application.yml 对应配置

server:
  port: 8082

spring:
  application:
    name: icoolkj-mall-order
  cloud:
    nacos:
      config:
        server-addr: icoolkj-mall-nacos-server:8848
        file-extension: yml   # 指定配置文件扩展名为yml

  config:
    import:
      - optional:nacos:${spring.application.name}.yml
      - optional:nacos:db-mysql-common.yml # mysql数据库公共配置
      - nacos:nacos-discovery.yml

#logging:
#  level:
#    com.alibaba.cloud.nacos: debug
3.2.2. 引入依赖

订单服务的 pom.xml 引入 nacos-config 依赖

<!-- nacos-config 配置中心依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

4. 重启订单服务,测试

4.1.1. 可以在订单服务的 application.yml 中增加 nacos 日志打印配置,便于查看从配置文件拉取配置情况
logging:
  level:
    com.alibaba.cloud.nacos: debug
4.1.2. Nacos 控制台查看订单服务是否启动成功,并注册到 Nacos 注册中心

如果没有拉取到数据库配置是会报错的。

4.1.3. 查看下单是否成功扣减库存

5. 其他服务整合 Nacos 配置中心

同订单服务整合 Nacos 配置中心步骤相同,将商品、库存、账户服务整合 Nacos 配置中心。

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mall-account?useSSL=false&characterEncoding=utf8
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mall-inventory?useSSL=false&characterEncoding=utf8
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mall-product?useSSL=false&characterEncoding=utf8

6. 小结

通过 Nacos 配置中心,可以实现微服务配置的统一管理。

;