3、Apollo at a glance

3.1 基础模型

如下即是Apollo的基础模型:

  1. 用户在配置中心对配置进行修改并发布
  2. 配置中心通知Apollo客户端有配置更新
  3. Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用

basic-architecture

3.2 界面概览

apollo-home-screenshot

上图是Apollo配置中心中一个项目的配置首页

  • 在页面左上方的环境列表模块展示了所有的环境和集群,用户可以随时切换。
  • 页面中央展示了两个namespace(application和FX.apollo)的配置信息,默认按照表格模式展示、编辑。用户也可以切换到文本模式,以文件形式查看、编辑。
  • 页面上可以方便地进行发布、回滚、灰度、授权、查看更改历史和发布历史等操作

3.3 添加/修改配置项

用户可以通过配置中心界面方便的添加/修改配置项,更多使用说明请参见应用接入指南

edit-item-entry

输入配置信息:

edit-item

3.4 发布配置

通过配置中心发布配置:

publish-items

填写发布信息:

publish-items

3.5 客户端获取配置(Java API样例)

配置发布后,就能在客户端获取到了,以Java为例,获取配置的示例代码如下。Apollo客户端还支持和Spring整合,更多客户端使用说明请参见Java客户端使用指南.Net客户端使用指南

  1. Config config = ConfigService.getAppConfig();
  2. Integer defaultRequestTimeout = 200;
  3. Integer requestTimeout = config.getIntProperty("requestTimeout", defaultRequestTimeout);

3.6 客户端监听配置变化

通过上述获取配置代码,应用就能实时获取到最新的配置了。

不过在某些场景下,应用还需要在配置变化时获得通知,比如数据库连接的切换等,所以Apollo还提供了监听配置变化的功能,Java示例如下:

  1. Config config = ConfigService.getAppConfig();
  2. config.addChangeListener(new ConfigChangeListener() {
  3. @Override
  4. public void onChange(ConfigChangeEvent changeEvent) {
  5. for (String key : changeEvent.changedKeys()) {
  6. ConfigChange change = changeEvent.getChange(key);
  7. System.out.println(String.format(
  8. "Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s",
  9. change.getPropertyName(), change.getOldValue(),
  10. change.getNewValue(), change.getChangeType()));
  11. }
  12. }
  13. });

3.7 Spring集成样例

Apollo和Spring也可以很方便地集成,只需要标注@EnableApolloConfig后就可以通过@Value获取配置信息:

  1. @Configuration
  2. @EnableApolloConfig
  3. public class AppConfig {}
  1. @Component
  2. public class SomeBean {
  3. //timeout的值会自动更新
  4. @Value("${request.timeout:200}")
  5. private int timeout;
  6. }