Apollo配置中心源码分析
1. apollo的核心代码分享
- SpringApplication启动的关键步骤
- 在SpringApplication中,会加载所有实现了Init方法的类
- 通过上述步骤,Apollo自己实现的ApplicationContextInitializer也就 被加载到容器中了。具体的加载流程如下:
2.Apollo启动一览
2.1 ApolloApplicationContextInitializer的作用
定义apollo的容器启动的时候具体的工作事项
容器启动的时候调用init方法
终上,在容器启动的时候,会调用RemoteConfigRepository的构造方法,而实现配置中心的同步主要是调用trySync,schedulePeriodicRefresh,scheduleLongPollingRefresh这个三个方法来实现配置的实时同步
2.2trySync()
2.3 schedulePeriodicRefresh
开启多线程,调用 trySync();
2.4 scheduleLongPollingRefresh
整个apollo配置中心的逻辑就是这样,简单的说就是无线循环的去获取配置信息,当获取到的配置信息与上次获取到的不同那么就刷新容器缓存的配置项并且更新客户端缓存的配置信息。
3. 注解ApolloConfigChangeListener分析
3.1@ApolloConfigChangeListener实现原理
Apollo配置中心有声明一个后置处理器,所以在程序启动的时候,spring容器会自动加载这个PostProcessor。
类图如下
由ApolloProcessor的具体实现可以看到,在postProcessBeforeInitialization(后置处理器生成之前,会调用子类的processField、processMethod方法)。就是说在ApolloProcessor构造后置处理器之前,会调用ApolloAnnotationProcessor的processMethod
ApolloAnnotationProcessor的具体实现
在配置文件发生变动的时候,调用顺序就跟第一大节说的顺序一致。
4 实际使用
4.1配置多个环境列表(一个portal管理多个环境的配置)
在启动portal的时候需要添加参数来指定某个环境对应的注册中心是什么。如下:
在启动Portal的时候,当点击的是dev也签,调用的注册中心是dev_meta;
在apollo中,可以支持多个环境列表的,通过阅读源码可以知道;在portal模块启动的时候,Apollo会将PortalDB库中的ServerConfig表中的数据添加到运行变量中去,其中就有环境列表的信息,这里需要手动加上去,并且用逗号隔开,添加的值也只能是它规定的那几个值。代码如下:
- 获取表中的数据并将它们设置到环境变量中
4.2 指定运行环境
- 1.在默认路径 /opt/settings/server.properties中指定代码的运行时环境。在项目启动的时候,会找到classpath路径下面的 apollo-env.properties,由它来指定具体的环境与注册中心的对应关系。这样,就不需要添加-Dapollo.mata这个变量了
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/qkl-jr/75560.html