微服务学习-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 配置中心,可以实现微服务配置的统一管理。

相关推荐
浮游本尊1 小时前
React 18.x 学习计划 - 第四天:React Hooks深入
前端·学习·react.js
陈小桔1 小时前
idea中重新加载所有maven项目失败,但maven compile成功
java·maven
小学鸡!1 小时前
Spring Boot实现日志链路追踪
java·spring boot·后端
xiaogg36781 小时前
阿里云k8s1.33部署yaml和dockerfile配置文件
java·linux·kubernetes
逆光的July1 小时前
Hikari连接池
java
微风粼粼2 小时前
eclipse 导入javaweb项目,以及配置教程(傻瓜式教学)
java·ide·eclipse
番茄Salad2 小时前
Spring Boot临时解决循环依赖注入问题
java·spring boot·spring cloud
立志成为大牛的小牛2 小时前
数据结构——二十六、邻接表(王道408)
开发语言·数据结构·c++·学习·程序人生
天若有情6732 小时前
Spring MVC文件上传与下载全面详解:从原理到实战
java·spring·mvc·springmvc·javaee·multipart
祈祷苍天赐我java之术2 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap