专业的编程技术博客社区

网站首页 > 博客文章 正文

分布式配置中心apollo-分析2(分布式 部署)

baijin 2024-08-22 09:32:31 博客文章 3 ℃ 0 评论

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.取出对应要更新的属性或方法,反射设置新值

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表