前言

本文基于 Apollo 1.9.2 版本,按照 官方文档 的介绍,在 M1 芯片的 MacBook Pro 上用 Docker 方式部署 Quick Start 是失败的,官方提供的 Docker 镜像暂不兼容 M1 芯片。所以选择用 bash 脚本的方式在本地部署。

准备工作

环境准备

  • JDKJAVA8+
  • MySQL5.6.5+

下载 Quick Start 安装包

Apollo 为我们提供了打包好的 jar 包和启动脚本。可在 GitHub 上下载:

1
git clone https://github.com/apolloconfig/apollo-build-scripts.git

其它方式可参考 官方文档

安装步骤

初始化数据库

apollo-build-scripts 仓库中提供了数据库脚本文件,在 apollo-build-scripts/sql 目录下,分别是 apolloconfigdb.sqlapolloprotaldb.sql。下面我们用图形化工具 Navicat 进行导入(注意:是导入而不是复制粘贴执行):

鼠标右键单击数据库连接->选择 Execute SQL File...

execute_sql_file

select_sql_file

选择 /sql 目录下的 .sql 文件,点击 start 开始导入:

start_sql_file

重复上述过程将另一个 .sql 文件也进行导入。

全部完成后,可通过以下 sql 语句进行验证:

1
select `Id`, `AppId`, `Name` from ApolloPortalDB.App;
IdAppIdName
1SampleAppSample App
1
select `NamespaceId`, `Key`, `Value`, `Comment` from ApolloConfigDB.Item;
NamespaceIdKeyValueComment
1timeout100sample timeout配置

如没有以上输出则导入有误。

配置数据库连接信息

修改 apollo-build-scripts/demo.sh 脚本中的数据库连接信息:

1
2
3
4
5
6
7
8
9
# apollo config db info
apollo_config_db_url="jdbc:mysql://localhost:3306/ApolloConfigDB?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"
apollo_config_db_username=用户名
apollo_config_db_password=密码

# apollo portal db info
apollo_portal_db_url="jdbc:mysql://localhost:3306/ApolloPortalDB?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"
apollo_portal_db_username=用户名
apollo_portal_db_password=密码

我的 MySQL 版本是 5.7.37,务必确保 MySQL 连接字符串中添加了 useSSL=false 参数,否则 Hikari 连接池会连接失败。

启动 Apollo 配置中心服务端

确保 807080808090 这三个端口未被占用。cdapollo-build-scripts 目录下执行启动脚本:

1
./demo.sh start

当看到如下输出后,说明启动成功了!

1
2
3
4
5
6
7
8
9
10
11
12
==== starting service ====
Service logging file is ./service/apollo-service.log
Started [29495]
Waiting for config service startup............
Config service started. You may visit http://localhost:8080 for service status now!
Waiting for admin service startup...
Admin service started
==== starting portal ====
Portal logging file is ./portal/apollo-portal.log
Started [29615]
Waiting for portal startup...........
Portal started. You can visit http://localhost:8070 now!

查看 Apollo 配置中心

浏览器访问 http://localhost:8070,默认用户名密码为 apollo/admin

打开可看到示例 SampleApp 项目,已发布 timeout=100 配置。

客户端读取配置

创建 maven 项目 apollo-sample

添加依赖

1
2
3
4
5
6
<!-- apollo客户端 -->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.9.2</version>
</dependency>

编写代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.sunchaser.sparrow.middleware.apollo;

import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;

/**
* Client客户端读取Apollo配置
*
* @author sunchaser admin@lilu.org.cn
* @since JDK8 2022/3/21
*/
public class ReadApolloConfigTest {

/**
* 添加VM参数:-Dapp.id=SampleApp -Denv=DEV -Ddev_meta=http://localhost:8080
*/
public static void main(String[] args) {
simpleReadConfigValue();
}

private static void simpleReadConfigValue() {
Config appConfig = ConfigService.getAppConfig();
String timeout = appConfig.getProperty("timeout", null);
System.out.println(timeout);
}
}

添加 VM Options-Dapp.id=SampleApp -Denv=DEV -Ddev_meta=http://localhost:8080

运行后可看到输出 timeout 值为 100

停止 Apollo 配置中心服务端

cdapollo-build-scripts 目录下执行启动脚本:

1
./demo.sh stop

输出以下内容则正常停止:

1
2
3
4
==== stopping portal ====
Stopped [29615]
==== stopping service ====
Stopped [29495]