Spring Cloud Alibaba微服务组件-Nacos-配置中心

Nacos做注册中心是以serviceName做基本管理单元,而作为配置中心则是以dataId为基本管理单元,dataId也就是配置文件名

使用

Spring Cloud Alibaba微服务组件-Nacos-配置中心_第1张图片

配置中心架构图

Spring Cloud Alibaba微服务组件-Nacos-配置中心_第2张图片

Spring Cloud Alibaba微服务组件-Nacos-配置中心_第3张图片

多个配置的优先级

Spring Cloud Alibaba微服务组件-Nacos-配置中心_第4张图片

配置动态更新

客户端

ConfigService

Spring Cloud Alibaba微服务组件-Nacos-配置中心_第5张图片

Spring Cloud Alibaba微服务组件-Nacos-配置中心_第6张图片

输出:

Spring Cloud Alibaba微服务组件-Nacos-配置中心_第7张图片

Spring Cloud Alibaba微服务组件-Nacos-配置中心_第8张图片

通过调用Nacos服务端的“获取配置”接口,来获取当前配置

如果Nacos服务端当前是3台机器组成的集群,Nacos客户端会拿到serverList,然后通过轮询的方式,逐个调用来获取配置

Spring容器启动完成时,会发布一个ContextReadyEvent,然后Nacos写了一个自定义的ApplicationListener来监听这个ContextReadyEvent事件,来进行一些扩展动作

自定义的ApplicationListener内部会先获取到所有的dataId,然后就会调用configService.registerListener(dataId,,)来为每一个dataId配置文件注册一个监听器

后续如果Nacos服务端的哪个dataId配置文件中的配置发生了变化,就会回调这个dataId配置文件对应的监听器

Spring Cloud Alibaba微服务组件-Nacos-配置中心_第9张图片

这里就是dataId为nacos-config-prod.yaml的配置文件发生了修改,然后回调了对应的监听器

第133行就会发布一个刷新事件RefreshEvent,

Spring Cloud Alibaba微服务组件-Nacos-配置中心_第10张图片

发布的刷新事件RefreshEvent,就会被这个监听器监听到,这个监听器要做的就是把引用了这个发生变化的配置的bean,先修改bean的对应属性的配置值,然后用新bean替换掉ioc容器中的久的bean

服务端

ConfigController#getConfig()

服务端是从服务端本地的磁盘配置文件中读的配置,而不是从服务端自己的mysql中读的

你可能感兴趣的:(微服务,spring)