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