springcloud之集成nacos config

写在前面

源码 。
本文看下如下集成nacos config组件。

1:常见配置方式分析

我们先来看下常见的配置方式都有哪些,以及其有什么优点和缺点。

  • 硬编码
优点:
    hardcode,除了开发的时候快些,爽一下,有个屁优点
缺点:
    配置和业务耦合,无法做到职责分离
    灵活度低
    修改配置需要修改代码,并重启应用,无法做到运行期灵活变更,对业务影响大,开发人员工作量大
  • 本地配置文件
优点:
    配置和业务解耦
缺点:
    灵活度低
    无法做到运行期零或变更,修改配置需要重启程序
    当修改文件较多时,开发人员修改配置文件工作量大,且容易出错
  • -D环境变量
优点:
    配置和业务解耦
优点:
    灵活度低
    无法做到运行期灵活变更,修改配置需要重启应用
    安全性低,容易泄露密码等敏感信息
    当应用较多时,修改的成本比较高,且容易出错
    无法进行版本维护,无法快读回滚到某历史版本
  • 数据库
优点:
    配置和业务解耦
缺点:
    灵活度低
    无法进行版本维护,无法快读回滚到某历史版本
    高并发场景下,可能将数据库打崩,因此需要时刻关注数据库的性能指标

以上传统配置方式存在的问题,配置中心可解,配置中心方式分析如下:

缺点:
    需要引入额外的组件,增加运维成本
优点:
    灵活度高
    通过动态变更的推送可实现运行期动态修改,某些场景下无需重启
    安全性高,通过权限控制提高安全性
    版本管理,实现快速回滚到历史版本
    统一管理配置文件,修改成本低

可参考下面几张图:
在这里插入图片描述

在这里插入图片描述

2:基于nacos config配置实战

我们以改造custom模块为例来作为实战内容,看下配置项动态更新,首先在custom模块引入依赖:

<!-- 添加Nacos Config配置项 -->
<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>

创建bootstrap.yml(springboot中该配置文件加载优先级最高,保证最先加载)配置配置中心相关信息,如下:

spring:
  # 必须把name属性从application.yml迁移过来,否则无法动态刷新
  application:
    name: coupon-customer-serv-config
  cloud:
    nacos:
      config:
        # nacos config服务器的地址
        server-addr: 192.168.10.99:8868
        file-extension: yml
        # prefix: 文件名前缀,默认是spring.application.name
        # 如果没有指定命令空间,则默认命令空间为PUBLIC
        namespace: dev
        # 如果没有配置Group,则默认值为DEFAULT_GROUP
        group: DEFAULT_GROUP
        # 从Nacos读取配置项的超时时间
        timeout: 5000
        # 长轮询超时时间
        config-long-poll-timeout: 10000
        # 轮询的重试时间
        config-retry-time: 2000
        # 长轮询最大重试次数
        max-retry: 3
        # 开启监听和自动刷新
        refresh-enabled: true
        # Nacos的扩展配置项,数字越大优先级越高
        extension-configs:
          - dataId: redis-config.yml
            group: EXT_GROUP
            # 动态刷新
            refresh: true
          - dataId: rabbitmq-config.yml
            group: EXT_GROUP
            refresh: true

extension-configs中是设置其他的配置文件,如配置各种三方组件连接信息的配置文件,这里是redis-config.yml和rabbitmq-config.yml。然后,我们点击页面右上角的➕符号创建三个配置文件,coupon-customer-serv.yml(默认分组)、redis-config.yml(EXT_GROUP 分组)和 rabbitmq-config.yml(EXT_GROUP 分组),创建后如下图:
在这里插入图片描述

其中coupon-customer-serv-config配置文件内容如下:

# 是否发放优惠券的业务开关
disableCouponRequest: false
spring:
#  application:
#    name: coupon-customer-serv
  datasource:
    # mysql数据源
    username: root
    password: root
    url: jdbc:mysql://192.168.10.114:3316/geekbang_coupon_db?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 连接池
    hikari:
      pool-name: GeekbangCouponHikari
      connection-timeout: 5000
      idle-timeout: 30000
      maximum-pool-size: 10
      minimum-idle: 5
      max-lifetime: 60000
      auto-commit: true

注意这里配置了spring.datasource信息,因此需要将application.yml中的注释掉。disableCouponRequest: false我们来使用其来测试配置动态更新功能。接着在CouponCustomerContrller中注入该属性(防止没有,给默认值false):

@Value("${disableCouponRequest:false}")
private Boolean disableCoupon;

修改dongshi.daddy.config.controller.CouponCustomerController#requestCoupon,为如下,增加是否发放优惠券的控制:

@PostMapping("requestCoupon")
public Coupon requestCoupon(@Valid @RequestBody RequestCoupon request) {
    if (disableCoupon) {
        System.out.println("暂停优惠券发放");
        return null;
    } else {
        System.out.println("优惠券正常发放");
    }
    return customerService.requestCoupon(request);
}

最后需要在在CouponCustomerContrller中添加注解@RefreshScope开启配置动态更新,最后就可以启动服务了:

...
2024-01-04 15:52:48.643  INFO 21232 --- [           main] c.a.n.client.config.impl.ClientWorker    : [fixed-192.168.10.99_8868-dev] [subscribe] coupon-customer-serv-config+DEFAULT_GROUP+dev
2024-01-04 15:52:48.643  INFO 21232 --- [           main] c.a.nacos.client.config.impl.CacheData   : [fixed-192.168.10.99_8868-dev] [add-listener] ok, tenant=dev, dataId=coupon-customer-serv-config, group=DEFAULT_GROUP, cnt=1
2024-01-04 15:52:48.644  INFO 21232 --- [           main] c.a.n.client.config.impl.ClientWorker    : [fixed-192.168.10.99_8868-dev] [subscribe] coupon-customer-serv-config.yml+DEFAULT_GROUP+dev
2024-01-04 15:52:48.644  INFO 21232 --- [           main] c.a.nacos.client.config.impl.CacheData   : [fixed-192.168.10.99_8868-dev] [add-listener] ok, tenant=dev, dataId=coupon-customer-serv-config.yml, group=DEFAULT_GROUP, cnt=1

看到以上信息则为成功了,接着我们来测试:

http://localhost:20001/coupon-customer/requestCoupon

{
    "userId": 1,
    "couponTemplateId": 2
}

在这里插入图片描述

接着通过如下操作修改disableCouponRequest为false:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

接着查看后台日志输出:

2024-01-04 16:01:27.737  INFO 21632 --- [.10.99_8868-dev] c.a.n.client.config.impl.ClientWorker    : [fixed-192.168.10.99_8868-dev] [data-received] dataId=coupon-customer-serv-config, group=DEFAULT_GROUP, tenant=dev, md5=2c03eb542c19f0231dea5abe524540e5, content=# 是否发放优惠券的业务开关
disableCouponRequest: false
spring:
#  application:
#    name: coupon-customer-serv
 ..., type=yaml

看其中的[data-received]就说明是配置动态更新通知,接着再来请求接口:

http://localhost:20001/coupon-customer/requestCoupon

{
    "userId": 1,
    "couponTemplateId": 2
}

在这里插入图片描述

写在后面

参考文章列表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/290981.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络机顶盒哪个好?耗时30天盘点网络机顶盒排名

网络机顶盒作为电视机的最佳搭档&#xff0c;是看片必备&#xff0c;网络机顶盒的品牌非常多让新手们在选购时往往不知道网络机顶盒哪个好&#xff0c;我耗时一个月测评了十几款热门的电视机顶盒&#xff0c;通过各个角度深度对比后整理了网络机顶盒排名&#xff0c;在选购时大…

NFC物联网开发在智慧校园中的应用

近年来&#xff0c;校园信息化建设速度加快&#xff0c;以物联网为基础、以各种应用服务系统为载体的智慧校园将教学、管理和校园生活充分融合&#xff0c;形成了工作、学习和生活的一体化环境。沉寂已久的NEC 技术&#xff0c;得益于智能手机的普及、无线网络数据速率提高&…

如何构建高效测试体系?掌握5大自动化测试模式就够了

软件开发过程中&#xff0c;高效的自动化测试体系是提升测试效率、保证产品质量关键&#xff0c;一个全面的测试体系涵盖多个维度&#xff0c;从功能性到用户界面&#xff0c;再到性能和安全性。 每个维度均采用不同的测试模式来满足特定的需求和解决特别的挑战&#xff0c;本…

Linux_源码编译安装LAMP

1. 安装httpd服务 在配置 Apache 网站服务之前&#xff0c;需要正确安装好 httpd 服务器软件。httpd 服务器的安装可以选用 RPM 安装、源码编译安装这两种方式&#xff0c;前者相对比较简单、快速&#xff0c;但是在功能上存在一定的局限性。在实际的生产环境中&#xff0c;使…

openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作

文章目录 openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作174.1 事务隔离说明174.2 写入和读写操作174.3 并发写入事务的潜在死锁情况 openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作 174.1 事务隔离说…

K线+直线 现货黄金也可能变现

现货黄金行情怎么做&#xff0c;这是投资者需要思考的问题。幸运的是&#xff0c;现在市面上有很多书籍&#xff0c;是其他有经验、有想法的投资者们对其经验的总结和分享&#xff0c;此外网络上还有不同的文章和各种各样的视频介绍相关交易经验&#xff0c;这都是可以让我们借…

VUE3跳转页面时 定时器未清除解决

一,问题 1、在vue中使用setTimeout定时器的时候&#xff0c;可能会遇到关不掉的情况&#xff0c;会存在明明已经在beforeDestroy和destroyed中设置了定时器清除了&#xff0c;但是有时候没生效&#xff0c;定时器还会继续执行。 2、在这里需要说一下setTimeout的使用场景&…

Kubernetes 配置Pod使用代理上网

配置Kubernetes Pod使用代理上网 在企业网络环境中进行Kubernetes集群的管理时&#xff0c;经常会遇到需要配置Pods通过HTTP代理服务器访问Internet的情况。这可能是由于各种原因&#xff0c;如安全策略限制、网络架构要求或者访问特定资源的需要。本文将介绍配置Kubernetes中…

天融信TOPSEC Cookie 远程命令执行漏洞复现

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、漏洞概述 天融信TOPSEC解决方案包括综合管理系统&#xff0c;各类安…

科研上新 | 第4期:语言-音乐对比预训练;查找表实现的神经网络推理;大模型时代重新定义搜索框架

编者按&#xff1a;欢迎阅读“科研上新”栏目&#xff01;“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里&#xff0c;你可以快速浏览研究院的亮点资讯&#xff0c;保持对前沿领域的敏锐嗅觉&#xff0c;同时也能找到先进实用的开源工具。 本期内容速览 …

草图大师 sketchup pro2023

SketchUp Pro是一款功能强大的三维建模软件&#xff0c;适用于建筑、机械、室内设计等领域。它提供了丰富的绘图工具和灵活的建模选项&#xff0c;支持实时预览和多种设备适配&#xff0c;让用户能够快速高效地创建出逼真的三维模型。SketchUp Pro还具备强大的插件生态和团队协…

【mars3d】FixedRoute的circle没有跟polyline贴着模型的解决方案

问题&#xff1a;【mars3d】官网的贴模型示例中&#xff0c;参考api文档增加了circle的配置&#xff0c;但是FixedRoute的circle没有跟polyline贴着模型 circle: { radius: 10, materialType: mars3d.MaterialType.CircleWave, materialOptions: { color: "#ffff00"…

数仓分层结构

--图片来源尚硅谷 ODS层&#xff1a; 数据存储格式&#xff1a;JSON/TSV gzip压缩&#xff08;默认&#xff09; Operate Data Store -- 存储从mysql业务数据库和日志服务器的日志文件中采集到的数据 -- 日志数据 -- 格式:JSON --业务数据 --历史数据 …

借还款记账表,借款还款记账软件

我们每个人都在为生活奔波&#xff0c;为事业打拼。但有时候&#xff0c;生活中的一些小事情&#xff0c;比如朋友间的借贷、还款&#xff0c;就可能让我们的生活变得有些混乱。为了解决这个问题&#xff0c;一个全新的借还款记账软件【晨曦记账本】横空出世&#xff0c;它不仅…

STM32真的是很落后吗?

今日话题&#xff0c;STM32真的是很落后吗&#xff1f;STM32是否落后于其他技术在很大程度上依赖于具体的应用和需求。虽然我对Python的了解有限&#xff0c;但我认识到STM32在嵌入式领域具有广泛的应用和卓越的性能。值得注意的是&#xff0c;STM32不仅性能卓越&#xff0c;而…

公众号文章如何提高阅读量?媒介盒子教你几招

公众号作为微信运营的主要载体&#xff0c;做得好就能让品牌得到大量曝光&#xff0c;公众号文章作为长文案想要写好还需要一定的技术&#xff0c;今天媒介盒子就来和大家聊聊公众号文章怎么写才能提高阅读量&#xff1a; 一、 内容干货满足读者求知欲 只要你的文章实用性强&…

CFOxCIO共议:CRM如何帮上市公司更长久赚钱?

2024年的增长机会&#xff0c;在于新旧动能转化&#xff0c;在于高质量发展&#xff0c;也在于组织的应变力。包括CRM系统在内的数字化平台对于上市公司的价值&#xff0c;正从单纯的降本增效工具&#xff0c;走向与合规及利润提升相结合&#xff0c;支撑企业战略落地&#xff…

Linux操作系统基础(02):Linux系统的安装

1. 准备工作 VMware Workstation 是一款由 VMware 公司开发的虚拟机软件&#xff0c;它可以在一台物理计算机上创建多个虚拟计算机环境&#xff0c;每个虚拟计算机都可以运行不同的操作系统&#xff0c;网络上的资源很多。 Windwos系统下载并安装 VMware Workstation17。在VM…

前端技术-调试工具(上)

页面制作之调试工具 常用的调试工具有Chrome浏览器的调试工具&#xff0c;火狐浏览器的Firebug插件调试工具&#xff0c;IE的开发人员工具等。它们的功能与使用方法大致相似。Chrome浏览器简洁快速&#xff0c;功能强大这里主要介绍Chrome浏览器的调试工具。 打开 Google Chrom…

搜维尔科技:【简报】第九届元宇宙数字人设计大赛,报名已经进入白热化阶段!

随着元宇宙时代的来临&#xff0c;数字人设计成为了创新前沿领域之一。为了提高大学生元宇宙虚拟人角色策划与美术设计的专业核心能力&#xff0c;我们特别举办了这场元宇宙数字人设计赛道&#xff0c;赛道主题为「AI人工智能科技」 &#xff0c;只要与「AI人工智能科技」相关的…