Spring Cloud 微服务项目实战
姚秋辰(姚半仙)
PayPal 研发经理
15862 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
结束语 (1讲)
Spring Cloud 微服务项目实战
15
15
1.0x
00:00/00:00
登录|注册

16 | 如何集成 Nacos Config 实现配置项动态刷新?

你好,我是姚秋辰。
在上一节课,你已经了解了配置中心在微服务架构中的作用和应用场景。今天我们就来学习如何让应用程序从 Nacos 分布式配置中心获取配置项。通过这节课的学习,你可以掌握微服务架构下的配置管理方式,知道如何通过动态配置推送来实现业务场景。
今天课程里将要介绍的动态推送是互联网公司应用非常广泛的一个玩法。我们都知道互联网行业比较卷,卷就意味着业务更新迭代特别频繁。
就拿我以前参与的新零售业务为例,运营团队三天两头就要对线上业务进行调整,为了降低需求变动带来的代码改动成本,很多时候我们会将一些业务抽离成可动态配置的模式,也就是通过动态配置改变线上业务的表现方式。比如手机 APP 上的商品资源位的布局和背景等,这些参数都可以通过线上的配置更新进行推送,不需要代码改动也不需要重启服务器。
接下来,我先来带你将应用程序接入到 Nacos 获取配置项,然后再来实现动态配置项刷新。本节课我选择 coupon-customer-serv 作为改造目标,因为 customer 服务的业务场景比较丰富,便于我们来演示各个不同的场景和用法。
接入 Nacos 配置中心的第一步,就是要添加 Nacos Config 和 Bootstrap 依赖项。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何使用Nacos Config实现配置项的动态刷新,以及在微服务架构中的重要性和应用场景。作者以coupon-customer-serv服务为例,讲解了接入Nacos获取配置项并实现动态配置项刷新的步骤,重点介绍了添加Nacos Config和Bootstrap依赖项的过程,以及在本地Nacos Config配置项中的各种配置项的含义和用法。通过文章,读者可以了解Nacos配置中心的重要性,以及如何通过Nacos实现配置项的动态刷新,对微服务架构下的配置管理方式有了更深入的了解。文章还介绍了动态配置推送和配置回滚的功能,以及RefreshScope动态刷新背后的实现原理。整体而言,本文内容丰富,适合对Spring Cloud感兴趣的读者阅读学习。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring Cloud 微服务项目实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • 一念之间
    老师您好,我要在在工具类中静态方法中使用nacos配置动态刷新,怎么实现

    作者回复: 往静态方法中注入一个可被刷新的属性吗?这可以间接曲线救国,把属性注入到一个受托管的对象里,静态类调用spring原生方法从上下文中拿这个对象的实例

    2022-02-09
    8
  • 西门吹牛
    长轮询是基于推和拉的这种方案,RocketMQ 和 Kafka 消费端消费消息也是长轮询,主动推的话,消费端可能顶不住,另外,zk 作为配置中心的 watch 机制好像是基于事件监听,主动推?现在 nacos 的普及度怎么样,是大厂都在用吗?感觉小公司,都是以前用的啥,就用啥,微服务这一套,也不引入,也不关注服务治理,出来问题,就是重启,手动刷数据

    作者回复: Nacos在国内用Spring Cloud架构的公司里应用程度还不错,而且国内nacos+dubbo生态也还可以,但在国外Nacos用的确实不多

    2022-05-25
    3
  • 靠人品去赢
    话说我直接用@NacosValue注解是不是相当于@Value和@RefreshScope,同时给安排了?

    作者回复: 我提示一下研究注解的一个方向,同学可以顺着去验证一下自己的想法。 一个注解除了自身的解释器以外,点击进到该注解源码你会发现有一些子注解,比如@RestController里就会有额外的子注解:Controller+ResponseBody注解。所以同学可以1)查看注解当前的解释器 2)查看子注解的解释器 来了解一个注解完整的功能

    2022-04-12
    3
  • peter
    请教老师两个问题: Q1:本篇(16篇)问题:从配置中心获取的配置项放在哪里? 应用从nacos config获取的配置项,保存在什么地方? 是保存到application.yml中吗? 还是保存在内存中? Q2:16篇之前的问题:服务层需要加原controller的注解吗? 16篇之前的某篇有一个问题,此篇中有一句话:"微服务甚至可以把controller去掉, 服务层挂上@ResponseBody直接对外暴露service"? 去掉controller,那么,服务层除了加@ResponseBody以外,是否需要添加 RestController、RequestMapping等注解吗? (为了找到出处,我用这句话中的几个关键字搜了全部文章,都没有找到,很奇怪啊。 如果老师也想不起来这句话,那就直接评论这句话吧)

    作者回复: 1. 获取的配置项加载到spring上下文中,可以认为是内存中。 2. 这样做没问题,controller这一层是mvc时代的产物,实际开发中并没有太多用处,只是用来安置spring mvc注解。所以去掉controller,对外直接暴露service是可以的,这也是dubbo、grpc这类RPC框架所使用的规范,

    2022-01-17
    3
  • intomymind
    关于长轮询机制有以下几个问题 Q1:客户端发起长轮询后,nacos收到这个请求,此时没有配置发生变化,那么此时服务端会hold这个请求,此时客户端是在等着吗? Q2:如果nacos服务端发生了配置变化,发送了一个事件,客户端会监听这个事件,毕竟是两个服务,那这个事件是如何进行传输的,是用tcp还是http?

    作者回复: 是通过HttpPost长轮询做的,可以理解为Pull模式和Push模式的折中方案,客户端在此期间是等待

    2022-01-17
    2
  • carl
    老师,nacos dev环境的yml配置文件在哪里领取?

    作者回复: 这部分文件没有上传到github哈,同学只能看下课程里图片中的配置截图,里面的内容比如DB配置这些都是从项目yml里copy过去的

    2022-11-01归属地:贵州
    1
  • Lee
    请教老师一个问题,refreshScope注解不添加的话,在动态改变nacos的value,也会在服务日志里面打印出来的,老师说必须要加才可以Nacos Config 中的属性变动就会动态同步到当前类的变量中。如果不添加 RefreshScope 注解,即便应用程序监听到了外部属性变更,那么类变量的值也不会被刷新。

    作者回复: 无论value有没有在上下文中使用到,只要触发了动态推送,同学都可以在日志里找到一行消费了nacos event的推送通知。但如果需要刷新上下文context,就要@RefreshScope (本质是scopeName="refresh"的 @Scope注解)

    2022-05-14
    1
  • silentyears
    老师好,有这么一个业务场景:配置系统A将配置数据推送到服务系统集群B上的jvm缓存中,想观测统计B集群中哪些机器已收到该配置。 实现思路:B节点缓存收到配置以后,更新nacos配置,(通过本篇机制)nacos通知A,A收到通知后记录B节点机器IP。 问题有:1、会不会有并发问题,B节点几十台,A收到通知后来不及记录ip;2、通知内容该怎么包含哪些要素,怎么设计;

    作者回复: 几十台这种并发量不会产生性能问题,不然这个配置系统A可承担不起配置系统的重任哦。 不过从设计角度来看,我可以提供一个新的思路。同学使用的是push方式,即B收到通知后主动push消息到A,这种方式是一种常用的思路,但要注意错误处理,即push消息丢失或者网络超时的时候如何处理。我建议可以结合pull方式,即配置系统A同时也主动pull各个机器上的配置信息,大大提高容错。至于通知的内容,我建议可以采用类似version control的方式,即配置副本的版本控制号,这样可以很容易知道目标机器上的配置是哪一版,进而知道推送是否成功

    2023-03-01归属地:北京
  • 找工作
    姚老师,我注册中心配置的很顺利,配置中心搞了半天没搞定,com.alibaba.nacos.client.naming 报错NET WORK unreachable

    作者回复: 同学把本地项目运行环境提供一下,比如是否使用了docker,然后报错的时间节点是在属性刷新refresh的时候,还是在启动项目获取配置阶段

    2022-04-19
    2
  • 杨逸林
    还是代理,无处不在的代理。Scope 可以自定义,Spring Batch 里面也有自定义的 Scope,有对应的 Scope 接口,也有同名的 RefreshScope 这个类,会在 BeanFactory 初始化的时候新加载这个 Scope。 ``` /** * Creates a scope instance and gives it the default name: "refresh". */ public RefreshScope() { super.setName("refresh"); } ``` 看这个代码就知道是怎么回事了。如果看到 ManagedOperation 这种注解,不用管,这只是 JMX 的内容,用不到的就不用了解。 Apollo 没有加这个 Scope 一样能用,之前小马哥对比过这两个,Apollo 不太符合 Spring Cloud 的规范。更好的,我觉得 Spring Cloud Config 还行,之前的作业就是让我们自定义个其中的配置的 Repository,以某一个文件变动为配置变动。Spring Cloud Config 的抽象写的还行。

    作者回复: spring cloud config正规军出品保质保量,不过它和Nacos注册中心不怎么对付,有些功能存在兼容性问题

    2022-01-17
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部