接上一章,本章主要对之前内容总结,apollo版本1.6.1
一.apoll核心组件

总体设计

二.代码实现细节
1.监听器
2.线程池
3.http长连接
4.spring异步请求
5.spi,apollo源码中大量使用api的方式,利于扩展。面向接口编程,具体的实现类通过spi的方式反射出来,多个相同类型的实现类,结合优先级排序。例如,可通过spi的方式再注入一个MetaServerProvider接口的实现类等
三.整理一些问题
1.apollo-config和apollo-admin共用一个数据库,为什么要分成两个应用?
apollo-admin因为需要不断开发 API 接口提供给apollo-portal,可能会不定期重启;而apollo-config功能比较单纯,基本不会有太多更新,因此不太会重启。其实如果考虑简单,可以不用拆分
2.如何禁用apollo-config中默认的eurake注册中心,使用外部的eurake注册中心?
修改配置apollo.eureka.server.enabled=false,禁用默认eurake,修改ApolloConfigDB.ServerConfig表中的eureka.service.url,指向自己的eureka地址,多个eurake之前用逗号分隔
3.apollo-config默认eurake注册中心,多个注册中心之间怎么协同?
一个apollo-config默认就是一个eurake注册中心, 同一个集群下,多个apollo-config就是多个eurake注册中心,此时多个注册中心之间是孤立的,没法协同,可以使用外部的eurake注册中心来实现集群
4.meta server和eurake可不可以拆分出来?
meta server注册中心的客户端,可以单独部署;同样eurake作为注册中心,也可以抽出来单独部署,甚至不限制注册中心,让用户自由选择注册中心;将它们和apollo-config集成在一块,主要是为了代码实现简单
5.配置变更返回200的时候,为什么不直接返回配置值?
可以直接返回配置值的,主要是为了代码实现简单,所以再调用一次同步接口
@ConfigurationProperties方式注入的配置,启动时注入,后续需要重新注入的话,需要自己处理一下,可以使用RefreshScope,也可以使用EnvironmentChangeEvent