Nacos做注册中心是以serviceName做基本管理单元,而作为配置中心则是以dataId为基本管理单元,dataId也就是配置文件名
使用
配置中心架构图
多个配置的优先级
配置动态更新
客户端
ConfigService
输出:
通过调用Nacos服务端的“获取配置”接口,来获取当前配置
如果Nacos服务端当前是3台机器组成的集群,Nacos客户端会拿到serverList,然后通过轮询的方式,逐个调用来获取配置
Spring容器启动完成时,会发布一个ContextReadyEvent,然后Nacos写了一个自定义的ApplicationListener<ContextReadyEvent>来监听这个ContextReadyEvent事件,来进行一些扩展动作
自定义的ApplicationListener<ContextReadyEvent>内部会先获取到所有的dataId,然后就会调用configService.registerListener(dataId,,)来为每一个dataId配置文件注册一个监听器
后续如果Nacos服务端的哪个dataId配置文件中的配置发生了变化,就会回调这个dataId配置文件对应的监听器
这里就是dataId为nacos-config-prod.yaml的配置文件发生了修改,然后回调了对应的监听器
第133行就会发布一个刷新事件RefreshEvent,
发布的刷新事件RefreshEvent,就会被这个监听器监听到,这个监听器要做的就是把引用了这个发生变化的配置的bean,先修改bean的对应属性的配置值,然后用新bean替换掉ioc容器中的久的bean
服务端
ConfigController#getConfig()
服务端是从服务端本地的磁盘配置文件中读的配置,而不是从服务端自己的mysql中读的