springboot版本2.2.6,apollo版本1.6.1
接上一章,本章主要介绍apollo-client的PropertySourcesProcessor对象(BeanFactory后置处理器)
一.initializePropertySources(),初始化远程apollo配置
1.取注解@EnableApolloConfig({ "apollo-share", "apollo-test"})的value值apollo-share和apollo-test做为namespace
2.循环namespace,调用Config config = ConfigService.getConfig(namespace),新建apollo配置
1)创建DefaultConfigFactory对象;2)创建远程配置仓库RemoteConfigRepository对象,发起http请求配置中心,查询远程配置;3)新建LocalFileConfigRepository本地配置仓库对象,将http请求回来的配置存储本地文件中(不同系统默认路径不一样,可以用apollo.cacheDir修改);4)本地配置仓库LocalFileConfigRepository同时又是一个监听器,监听远程配置仓库RemoteConfigRepository的变更;config配置对象也是一个监听器,监听着本地配置仓库LocalFileConfigRepository的变更
3.远程配置仓库RemoteConfigRepository对象内部三个http请求:1)trySync实时刷新-同步返回,对象实例化的时候调用,实时查询返回结果;2)schedulePeriodicRefresh定时任务反复刷新-同步返回;3)scheduleLongPollingRefresh死循环长连接刷新-异步返回,发出去的请求,会被apollo服务端hold住,有配置变更时返回200,收到200时,调用trySync实时刷新-同步返回;没有信息变更,超时时间到了返回304,收到304什么也不做,因为是死循环,进入下一轮长连接请求
4.将新建的远程apollo配置封装成ConfigPropertySource对象,放入容器上下文件的配置集合中
二.initializeAutoUpdatePropertiesFeature(beanFactory)初始化自动更新监听器
1.新建AutoUpdateConfigChangeListener自动更新监听器,将其绑定在新建远程apollo配置ConfigPropertySource资源对象上
2.Multimap是一个key对应多个实体value的map集合,存放过程中自动将实体进行归类Multimap<String,Collection<T>>
3.SpringValueRegistry类,主要封装属性中含有占位符${key}中的key找出来,key和field等做好关联,放入map集合中,方便后续拉取最新配置后实时找到对应映射关系并反射设置新值
三.AutoUpdateConfigChangeListener自动更新监听器
1.本地配置仓库LocalFileConfigRepository同时又是一个监听器,监听远程配置仓库RemoteConfigRepository对象的变更
2.config配置对象也是一个监听器,监听着本地配置仓库LocalFileConfigRepository的变更
3.AutoUpdateConfigChangeListener监听器监听着config配置对象的变更
四.AutoUpdateConfigChangeListener的监听方法
1.AutoUpdateConfigChangeListener自动监听变更对象中持有SpringValueRegistry对象,SpringValueRegistry里面封装着含有占位符${key}中key和属性或方法的映射关系,所有只要找到哪个key值有变更,解析变更后的新值
2.取出对应要更新的属性或方法,反射设置新值
本文暂时没有评论,来添加一个吧(●'◡'●)