16 | 如何集成 Nacos Config 实现配置项动态刷新?
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了如何使用Nacos Config实现配置项的动态刷新,以及在微服务架构中的重要性和应用场景。作者以coupon-customer-serv服务为例,讲解了接入Nacos获取配置项并实现动态配置项刷新的步骤,重点介绍了添加Nacos Config和Bootstrap依赖项的过程,以及在本地Nacos Config配置项中的各种配置项的含义和用法。通过文章,读者可以了解Nacos配置中心的重要性,以及如何通过Nacos实现配置项的动态刷新,对微服务架构下的配置管理方式有了更深入的了解。文章还介绍了动态配置推送和配置回滚的功能,以及RefreshScope动态刷新背后的实现原理。整体而言,本文内容丰富,适合对Spring Cloud感兴趣的读者阅读学习。
《Spring Cloud 微服务项目实战》,新⼈⾸单¥59
全部留言(17)
- 最新
- 精选
- 一念之间老师您好,我要在在工具类中静态方法中使用nacos配置动态刷新,怎么实现
作者回复: 往静态方法中注入一个可被刷新的属性吗?这可以间接曲线救国,把属性注入到一个受托管的对象里,静态类调用spring原生方法从上下文中拿这个对象的实例
2022-02-098 - 西门吹牛长轮询是基于推和拉的这种方案,RocketMQ 和 Kafka 消费端消费消息也是长轮询,主动推的话,消费端可能顶不住,另外,zk 作为配置中心的 watch 机制好像是基于事件监听,主动推?现在 nacos 的普及度怎么样,是大厂都在用吗?感觉小公司,都是以前用的啥,就用啥,微服务这一套,也不引入,也不关注服务治理,出来问题,就是重启,手动刷数据
作者回复: Nacos在国内用Spring Cloud架构的公司里应用程度还不错,而且国内nacos+dubbo生态也还可以,但在国外Nacos用的确实不多
2022-05-253 - 靠人品去赢话说我直接用@NacosValue注解是不是相当于@Value和@RefreshScope,同时给安排了?
作者回复: 我提示一下研究注解的一个方向,同学可以顺着去验证一下自己的想法。 一个注解除了自身的解释器以外,点击进到该注解源码你会发现有一些子注解,比如@RestController里就会有额外的子注解:Controller+ResponseBody注解。所以同学可以1)查看注解当前的解释器 2)查看子注解的解释器 来了解一个注解完整的功能
2022-04-123 - 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-173 - intomymind关于长轮询机制有以下几个问题 Q1:客户端发起长轮询后,nacos收到这个请求,此时没有配置发生变化,那么此时服务端会hold这个请求,此时客户端是在等着吗? Q2:如果nacos服务端发生了配置变化,发送了一个事件,客户端会监听这个事件,毕竟是两个服务,那这个事件是如何进行传输的,是用tcp还是http?
作者回复: 是通过HttpPost长轮询做的,可以理解为Pull模式和Push模式的折中方案,客户端在此期间是等待
2022-01-172 - 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-141 - 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-192 - 杨逸林还是代理,无处不在的代理。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