Apollo 配置中心:携程开源配置管理平台

FreeGuideOnline 最新 2026-06-30

yaml version: '3' services: apollo-quick-start: image: apolloconfig/apollo-quick-start:latest container_name: apollo-quick-start ports: - "8080:8080" # Portal - "8070:8070" # Config & Admin environment: - EUREKA_INSTANCE_IP_ADDRESS=宿主机IP volumes: - ./apollo/logs:/opt/logs depends_on: - apollo-db apollo-db: image: mysql:5.7 container_name: apollo-db environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: ApolloPortalDB ports: - "13307:3306" volumes: - ./sql:/docker-entrypoint-initdb.d


需要提前将官方提供的 `apolloportaldb.sql` 和 `apolloconfigdb.sql` 放入 `./sql` 目录。

2. 执行 `docker-compose up -d`,稍等片刻,访问 `http://宿主机IP:8080`,使用默认账号 `apollo/admin` 登录。

3. 在 Portal 中即可创建项目、添加配置,完成基础体验。

> **提示**:入门学习可使用 Quick Start 镜像,生产部署请务必参考 [官方分布式部署指南](https://www.apolloconfig.com/#/zh/deployment/distributed-deployment-guide)。

## 项目管理与配置操作

### 创建第一个项目

登录 Portal,点击“创建项目”,填入:

- **应用ID**:全局唯一标识,对应客户端配置中的 `app.id`。
- **应用名称**:任意可读名称。
- **部门**:按需选择。

一个项目代表一个微服务或应用。创建后,项目下默认会存在 `DEV`、`TEST`、`FPP`(预生产)、`PRO` 等环境,每个环境可拥有独立的配置。

### 新增配置项

进入项目 → 选择环境(如 DEV)→ 点击“新增配置”。配置支持多种格式:

- **文本**:普通键值对,如 `timeout=3000`
- **JSON**:直接输入合法 JSON,前端会自动解析展示
- **XML / Properties / YAML**:选择对应格式输入即可

**示例**:添加一个 `server.port` 配置,值为 `8081`,并添加备注。完成后点击“发布”,配置才会推送到客户端。未发布的配置仅存储为草稿。

### 配置的命名空间

Apollo 引入了 `Namespace` 的概念来划分不同类别的配置。每个项目有两个默认命名空间:

- **application**:公共应用配置,客户端必加载。
- **TEXT** 或自定义的私有命名空间:可按模块划分,如 `datasource`、`redis`,客户端按需加载。

公共命名空间可被多个项目继承,实现配置共享。在“管理”界面可新增公共命名空间,然后其他项目引用。

### 灰度发布与版本回滚

灰度发布允许配置只对部分实例生效,用于验证配置可靠性。

操作路径:配置发布 → 点击“灰度” → 选择灰度规则(按 IP、按标签等),指定灰度实例 → 发布。灰度发布后,只有匹配规则的客户端收到新配置,其余仍用旧值。验证无问题后,可“全量发布”将配置推送给所有实例。

每次发布都会生成历史版本,可在“历史版本”中查看 diff 并一键回滚到任意历史版本。

## 客户端接入(以 Spring Boot 为例)

Apollo 客户端不限制语言,官方提供 Java、.Net、Go 等 SDK。以下演示 Java 项目接入步骤。

### 1. 添加依赖

在 Spring Boot 项目的 `pom.xml` 中加入:

```xml
<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>2.1.0</version>
</dependency>

2. 基础配置

application.propertiesbootstrap.properties 中设置 Apollo 必要参数:

# 必须,与 Portal 中创建的应用ID一致
app.id=my-demo-app
# Apollo Meta Server 地址(即 Config Service 地址)
apollo.meta=http://localhost:8080
# 可选,本地缓存路径
apollo.cacheDir=/opt/data/apollo-demo
# 可选,指定使用的环境
env=DEV
# 可选,指定集群名称(默认 default)
apollo.cluster=default

如果使用 Spring Cloud,可以引入 apollo-client-spring-boot-starter 并通过 application.yml 配置,但 app.id 等核心参数仍需提供。

3. 配置读取示例

方式一:通过 @Value 注解(支持动态刷新)

在 Spring Bean 中使用 @Value 并配合 @RefreshScope

@RestController
@RefreshScope
public class ConfigController {
    @Value("${timeout:3000}")
    private int timeout;

    @GetMapping("/timeout")
    public int getTimeout() {
        return timeout;
    }
}

当 Apollo 中的 timeout 配置变更并发布后,带有 @RefreshScope 的 Bean 会重新注入新值。

方式二:通过 API 直接获取(非 Spring 环境)

Config config = ConfigService.getAppConfig(); // 获取 application 命名空间
String someKey = config.getProperty("someKey", "defaultValue");

Apollo 客户端 SDK 会在内存中维护配置缓存,并开启长轮询监听服务端变更,保证实时性(默认 1 秒间隔)。

4. 监听配置变更

如果需要执行自定义逻辑,可以实现监听器:

Config config = ConfigService.getAppConfig();
config.addChangeListener(changeEvent -> {
    for (String key : changeEvent.changedKeys()) {
        ConfigChange change = changeEvent.getChange(key);
        System.out.println("配置变更: " + key + " = " + change.getNewValue());
    }
});