沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • API网关

  • RPC

  • 消息队列

  • Spring Cloud

    • Spring Cloud Alibaba 从入门到实战

      • 基础知识篇
      • 分布式配置
      • 服务注册与发现
      • 分布式服务调用
      • 服务熔断和限流
      • 分布式消息(事件)驱动
      • 分布式事务
    • SpringCloud Stream学习
    • Nacos入门
    • Apollo入门
      • Apollo 简介
      • Apollo 核心概念
      • 核心组件和架构
      • Apollo 与 Nacos 的对比
      • Apollo 快速上手
        • 环境准备
        • windows 环境启动
        • 创建配置示例
        • 客户端接入
        • 方式一:使用 @Value
        • 方式二:使用 Config API
        • 支持配置变更监听
        • 使用 Spring Boot Starter(推荐)
      • 实践建议
      • 学习参考
  • 分布式事务

  • 云存储

  • 搜索引擎

  • 多媒体框架

  • 虚拟机

  • 微服务
  • Spring Cloud
沉梦听雨
2025-07-24
目录

Apollo入门

# Apollo 入门

# Apollo 简介

Apollo (opens new window) 是携程开源的一款 分布式配置中心,用于集中管理应用配置,支持热更新、权限控制、灰度发布等功能,适用于微服务架构中配置管理的场景。

Apollo 的主要特点包括

  • 配置 集中管理,可视化修改;
  • 支持 实时推送(热更新),客户端自动刷新;
  • 支持配置 灰度发布;
  • 支持多环境、多集群、多命名空间;
  • 提供 版本回滚 功能;
  • 支持 权限管理与审计日志。

Apollo 支持 4 个维度管理 Key-Value 格式的配置

  1. application (应用)
  2. environment (环境)
  3. cluster (集群)
  4. namespace (命名空间)

# Apollo 核心概念

  1. application (应用)
    • 这个很好理解,就是实际使用配置的应用,Apollo 客户端在运行时需要知道当前应用是谁,从而可以去获取对应的配置
    • 关键字:appId
  2. environment (环境)
    • 配置对应的环境,Apollo 客户端在运行时需要知道当前应用处于哪个环境,从而可以去获取应用的配置
    • 关键字:env
  3. cluster (集群)
    • 一个应用下不同实例的分组,比如典型的可以按照数据中心分,把上海机房的应用实例分为一个集群,把北京机房的应用实例分为另一个集群。
    • 关键字:cluster
  4. namespace (命名空间)
    • 一个应用下不同配置的分组,可以简单地把 namespace 类比为文件,不同类型的配置存放在不同的文件中,如数据库配置文件,RPC 配置文件,应用自身的配置文件等
    • 关键字:namespaces

关系:应用包含多个环境,环境包含多个集群,集群中包含多个命名空间

命名空间注意事项

  • 命名空间名全局唯一(比如两个应用不能都创建一个叫 common.json 的公共命名空间);
  • 公共命名空间建议统一在一个配置应用下维护,比如 common-config;
  • 公共命名空间中的 key 如果与私有命名空间冲突,以 私有命名空间优先;
  • 一个应用可以同时引用多个公共命名空间。

命名空间实战建议

场景 建议类型
每个服务自己的业务配置 私有命名空间
多服务共享的 Redis、限流、开关等 公共命名空间
想以模块区分配置,如 log4j.yaml 私有或公共皆可,取决于是否共享
想全局维护一些规则 公共命名空间

# 核心组件和架构

Apollo 的核心由以下几个模块组成:

  1. Config Service:提供配置读取、推送服务(对客户端)。
  2. Admin Service:提供配置管理功能(供 Portal 使用)。
  3. Portal:可视化管理界面。
  4. 客户端 SDK:集成在服务中,实现配置读取和监听更新。

Apollo 架构图如下:

          +-----------+         +-----------------+
          |  Apollo   |<------->|  Config Service |
          |  Portal   |         +-----------------+
               |
         +-------------+
         | AdminService|
         +-------------+
1
2
3
4
5
6
7

客户端部署后,会通过 SDK 向 Config Service 拉取配置,并可实时监听配置变更。

# Apollo 与 Nacos 的对比

特性 Apollo Nacos
所属 携程开源 阿里开源
配置热更新 支持(默认开启) 支持(需依赖 Spring Cloud)
多命名空间支持 支持 支持
灰度发布 支持 不支持
权限管理 支持 简单支持
集群部署难度 相对复杂 较简单
配置格式支持 支持 Properties、YAML、JSON、XML 等 支持 Properties、YAML、JSON
服务注册与发现 不支持(只管配置) 支持(服务发现与配置中心二合一)

简而言之:

  • Apollo 更注重 配置管理能力,尤其适合配置量大、管理复杂的项目;
  • Nacos 是一个 配置中心 + 注册中心 的统一平台,更适合 Spring Cloud 项目。

# Apollo 快速上手

官方文档:Quick Start (opens new window)

# 环境准备

官方提供了 apollo-quick-start 项目 (opens new window),可以使用 Docker 快速部署。

# windows 环境启动

在 git bash 中,执行下面的启动命令:

export SPRING_PROFILES_ACTIVE="github,database-discovery,auth"

# 配置 ApolloConfigDB 数据库连接
unset SPRING_SQL_CONFIG_INIT_MODE
export SPRING_CONFIG_DATASOURCE_URL="jdbc:mysql://localhost:3306/apolloconfigdb?useUnicode=true&characterEncoding=utf8&useSSL=false"
export SPRING_CONFIG_DATASOURCE_USERNAME="root"
export SPRING_CONFIG_DATASOURCE_PASSWORD="123456"

# 配置 ApolloPortalDB 数据库连接
unset SPRING_SQL_PORTAL_INIT_MODE
export SPRING_PORTAL_DATASOURCE_URL="jdbc:mysql://localhost:3306/apolloportaldb?useUnicode=true&characterEncoding=utf8&useSSL=false"
export SPRING_PORTAL_DATASOURCE_USERNAME="root"
export SPRING_PORTAL_DATASOURCE_PASSWORD="123456"
java -jar apollo-all-in-one.jar
1
2
3
4
5
6
7
8
9
10
11
12
13
14

或者执行启动脚本命令:

  • ⚠️注意:这种命令启动无法直接通过 Ctrl + c 来关闭项目
# 启动
./demo.sh start

# 关闭
./demo.sh stop
1
2
3
4
5

启动成功后:

  • Portal 地址: http://localhost:8070 (opens new window)
  • 默认账号: apollo / admin

# 创建配置示例

进入 Portal:

  1. 创建一个新的应用(App Id 如 demo-java-app);
  2. 创建命名空间,如 application;
  3. 添加配置项:
    • user.name = apollo
    • user.age = 25

发布配置后,客户端即可拉取。

# 客户端接入

以 Spring Boot 为例,引入依赖:

<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>2.2.0</version>
</dependency>
1
2
3
4
5

在 application.properties 中配置:

app.id=demo-java-app
apollo.meta=http://localhost:8080
1
2

读取配置方式有两种:

# 方式一:使用 @Value

@Value("${user.name}")
private String userName;
1
2

# 方式二:使用 Config API

Config config = ConfigService.getAppConfig();
String userName = config.getProperty("user.name", "defaultName");
1
2

# 支持配置变更监听

config.addChangeListener(changeEvent -> {
    for (String key : changeEvent.changedKeys()) {
        ConfigChange change = changeEvent.getChange(key);
        System.out.printf("Found change - key: %s, oldValue: %s, newValue: %s%n",
            change.getPropertyName(), change.getOldValue(), change.getNewValue());
    }
});
1
2
3
4
5
6
7

# 使用 Spring Boot Starter(推荐)

引入 Starter:

<dependency>
  <groupId>com.ctrip.framework.apollo</groupId>
  <artifactId>apollo-client-config-spring-boot-starter</artifactId>
  <version>2.2.0</version>
</dependency>
1
2
3
4
5

Spring Boot 项目将自动启用 Apollo 配置,application.properties 中配置好 app.id 和 apollo.meta 即可。

# 实践建议

  • 配置分类建议使用多个命名空间(如 DB 配置、线程池配置、开关配置分开管理);
  • 线上配置发布建议启用审计、灰度发布功能,避免全量影响;
  • 定期使用回滚功能测试变更的安全性;
  • 警惕误删配置项,可以启用强制发布审核流程。

# 学习参考

  • 配置中心:Apollo入门了解 - 知乎 (opens new window)
  • apollo quick start操作 - 简书 (opens new window)
上次更新: 2025/7/25 19:14:44
Nacos入门
认识Seata

← Nacos入门 认识Seata→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式