SpringCloud系列教程:微服务的未来(十六)配置共享、配置热更新

前言

在分布式系统中,配置管理是非常关键的一环。Nacos(Dynamic Naming and Configuration Service)作为一个易于使用的动态服务发现、配置和服务管理平台,广泛应用于微服务架构中。Nacos 提供了强大的配置共享和热更新功能,使得开发者能够方便地在不同的应用和环境中管理和更新配置,减少了配置同步和管理的复杂性。
本篇博客将重点讨论如何实现 Nacos 配置的共享,以及如何利用 Nacos 的热更新功能,确保系统配置的高效管理和即时生效。


配置管理

  • 微服务重复配置过多,维护成本高
  • 业务配置经常变动,每次修改都要重启服务
  • 网关路由配置写死,如果变更要重启网关
    在这里插入图片描述

配置共享

一、添加一些共享配置到Nacos中,包括:Jdbc、MybatisPlus、日志、Swagger、OpenFeign等配置
进入http://你的nacos地址:端口号/nacos,登录后
在这里插入图片描述
在表单中填写信息
在这里插入图片描述
jdbc、Mybatis具体配置内容如下:

spring:
  datasource:
    url: jdbc:mysql://${hm.db.host:192.168.244.134}:${hm.db.port:3306}/${hm.db.database}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: ${hm.db.un:root}
    password: ${hm.db.pw:1234}
mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
  global-config:
    db-config:
      update-strategy: not_null
      id-type: auto

jdbc:mysql://${hm.db.host:192.168.244.134}: ${hm.db.port:3306}/${hm.db.database} 采用了占位符来允许外部配置变量来动态替换,例如 hm.db.host 为 MySQL 主机地址,hm.db.port 为数据库端口,hm.db.database 为数据库名称。如果这些配置没有被指定,则默认使用 192.168.244.134 作为主机,3306 作为端口,hm.db.database 对应的数据库名。
![](https://i-blog.csdnimg.cn/direct/dd8137b532e445b18182ee88d192cf59.png
)
日志配置具体如下

logging:
  level:
    com.hmall: debug
  pattern:
    dateformat: HH:mm:ss:SSS
  file:
    path: "logs/${spring.application.name}"

在这里插入图片描述
共享的swagger配置具体如下:

knife4j:
  enable: true
  openapi:
    title: ${hm.swagger.title:黑马商城接口文档}
    description: ${hm.swagger.description:黑马商城接口文档}
    email: ${hm.swagger.email:zhanghuyi@itcast.cn}
    concat: ${hm.swagger.concat:虎哥}
    url: https://www.itcast.cn
    version: v1.0.0
    group:
      default:
        group-name: default
        api-rule: package
        api-rule-resources:
          - ${hm.swagger.package}

二、基于NacosConfig拉取共享配置代替微服务的本地配置,
在这里插入图片描述
拉取共享配置
基于NacosConfig拉取共享配置代替微服务的本地配置。
(1)引入依赖

  <!--nacos配置管理-->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  </dependency>
  <!--读取bootstrap文件-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bootstrap</artifactId>
  </dependency>

(2)新建bootstrap.yaml文件

spring:
  application:
    name: cart-service # 服务名称
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: 192.168.244.134:8848 # nacos地址
      config:
        file-extension: yaml # 文件后缀名
        shared-configs: # 共享配置
          - dataId: shared-jdbc.yaml # 共享mybatis配置
          - dataId: shared-log.yaml # 共享日志配置
          - dataId: shared-swagger.yaml # 共享日志配置

在这里插入图片描述
在这里插入图片描述
修改后的application.yaml文件内容如下:

server:
  port: 8082
feign:
  okhttp:
    enabled: true
hm:
   db:
     database: hm-cart
swagger:
  title: "黑马商城购物车接口文档"
  package: com.hmall.cart.controller

配置热更新

配置热更新:当修改配置文件中的配置时,微服务无需重启即可使配置生效
前提条件:
1.nacos中要有一个与微服务名有关的配置文件
在这里插入图片描述
2.微服务中要以特定的方式读取需要的热更新的配置属性

@Data
@ConfigurationPrpperties(prefix="hm.cart")
public class CartProperties {
	private int maxItems;
}
@Data
@Refreshscope
public class CartProperties{
	@Value("${hm.cart.maxItems}")
	private int maxItems;
}

需求:购物车的限定数量目前是写死在业务中的,将其改为读取配置文件属性,并将配置交给Nacos管理,实现热更新。
在这里插入图片描述
在这里插入图片描述
修改对应的CartServiceImpl类

@Service
@RequiredArgsConstructor
public class CartServiceImpl extends ServiceImpl<CartMapper, Cart> implements ICartService {
	...
    private final CartProperties cartProperties;
    ...
    private void checkCartsFull(Long userId) {
        int count = lambdaQuery().eq(Cart::getUserId, userId).count();
        if (count >= cartProperties.getMaxItem()) {
            throw new BizIllegalException(StrUtil.format("用户购物车课程不能超过{}", cartProperties.getMaxItem()));
        }
    }

在nacos中添加一个配置文件,将购物车的上限数量添加到配置中
在这里插入图片描述

hm:
  cart:
    maxAmount: 2 #购物车商品数量上限

重启服务后测试
Alt
在这里插入图片描述
后续需要修改购物车的商品最高限制要求直接去nacos的配置cart-service.yaml中修改,且不需要再重启服务。


总结

在分布式系统中,配置管理是非常关键的一环。Nacos(Dynamic Naming and Configuration Service)作为一个易于使用的动态服务发现、配置和服务管理平台,广泛应用于微服务架构中。Nacos 提供了强大的配置共享和热更新功能,使得开发者能够方便地在不同的应用和环境中管理和更新配置,减少了配置同步和管理的复杂性。
本篇博客将重点讨论如何实现 Nacos 配置的共享,以及如何利用 Nacos 的热更新功能,确保系统配置的高效管理和即时生效。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值