Apollo 配置中心客户端源码分析
2021-09-19 16:02:05 0 举报
Apollo 客户端在 SpringBoot 框架中运行的原理
作者其他创作
大纲/内容
springValue.update()
listener.onChange()
factory.create()
2. 回调 EnvironmentPostProcessor#postProcessEnvironment() 方法
ApolloConfigRegistrar
子类实现
DefaultConfig
new AutoUpdateConfigChangeListener()
4. 准备上下文过程中 ImportBeanDefinitionRegistrar#registerBeanDefinitions()方法
initialize()
springValueRegistry.register()
this.fireRepositoryChange()
findAllField()
PropertySourcesProcessor.addNamespaces()
helper.setEnvironment()
ApolloProcessor
ConfigService.getConfig()
initializeAutoUpdatePropertiesFeature()
@EnableApolloConfig
3. 创建注册类对象过程中回调 EnvironmentAware#setEnvironment()方法
createRemoteConfigRepository()
SpringValueRegistry
scheduleLongPollingRefresh()
ConfigService
trySync()
5. 创建对象过程中回调 EnvironmentAware#setEnvironment()方法
子类实现 processMethod()
new SpringValue()
ConfigPropertySourceFactory
DefaultConfigManager
AutoUpdateConfigChangeListener
7. 创建对象过程中回调 BeanPostProcessor#postProcessBeforeInitialization() 方法
new LocalFileConfigRepository()
super.postProcessBeforeInitialization()
remoteConfigLongPollService.submit()
remoteConfigRepository.onLongPollNotified()
2. SpringBoot 框架启动过程中创建了 Environment 后会加载 Apollo 组件中 spring.factories 文件配置的 EnvironmentPostProcessor 实现类,执行其后置处理器的处理方法
子类实现 sync()
PropertySourcesProcessor
startLongPolling()
ApolloConfigRegistrarHelper
1. SpringBoot 框架启动时会加载 Apollo 组件中 spring.factories 文件配置的 ApplicationContextInitializer 实现类,该类用于加载在本地 application.yml 文件中 apollo.bootstrap.namespaces 属性配置的命名空间
springValueRegistry.get()
configPropertySource.addChangeListener()
doLongPollingRefresh()
5. 创建并缓存 Apollo 中 apollo.bootstrap.namespaces 配置的 PropertySource
ApolloApplicationContextInitializer
findAllMethod()
resolveNamespaces()
SpringValueProcessor
loadApolloConfig()
DefaultConfigFactory
new RemoteConfigRepository()
RemoteConfigRepository
4. ConfigService.getConfig()
ConfigChangeListener
LocalFileConfigRepository
5. configPropertySourceFactory.getConfigPropertySource()
s_instance.getManager().getConfig()
updateSpringValue()
this.fireConfigChange()
setUpstreamRepository()
SpringValue
notify()
调用父类 trySync()
DefaultApolloConfigRegistrarHelper
trySync()
3. initialize()
initializePropertySources()
6. 回调 ApplicationContextInitializer#initialize() 方法
ApolloConfigRegistrarHelper 实例化采用了 Java 中的 ServiceLoader 机制,最终实现类为 DefaultApolloConfigRegistrarHelper
1. 实例化 Apollo 配置的上下文初始化类
schedulePeriodicRefresh()
长轮训或者定时任务拉到服务端配置有变化触发
DefaultApolloConfigRegistrarHelper#registerBeanDefinitions() 解析 @EnableApolloConfig 注解获取指定 namespace 名称缓存下来,并注册 apollo 相关的重要组件。实例化类对象时,getOrder() 返回的值越小,顺序越靠前
resolvePropertyValue()
helper.registerBeanDefinitions()
AbstractConfigRepository
RemoteConfigLongPollService
listener.onRepositoryChange()
子类实现 processField()
6. 创建对象过程中回调 BeanFactoryPostProcessor#postProcessBeanFactory()方法
createLocalConfigRepository()
2. @Import(ApolloConfigRegistrar.class)
1. 启用 @EnableApolloConfig 注解
new DefaultConfig()
0 条评论
下一页