发布于 

使用 Apollo 搭建 Spring Boot 配置中心

监测程序的分布式部署需要一个中心节点控制各监测节点的配置,Spring Cloud Config 看起来太复杂了,这里采用Apollo配置中心进行配置管理

根据官方文档进行部署,并记录相关步骤

MySQL搭建

采用Docker搭建MySQL数据库,具体操作参见:

Apollo服务端共需要两个数据库:ApolloPortalDBApolloConfigDB,导入数据库即可:

导入后通过如下语句进行验证:

Apollo搭建

使用Docker进行Apollo搭建

Apollo Config Service

获取镜像

根据镜像创建容器

1
2
3
4
5
docker run -p 8080:8080 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://fill-in-the-correct-server:3306/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=FillInCorrectUser -e SPRING_DATASOURCE_PASSWORD=FillInCorrectPassword \
-d -v /tmp/logs:/opt/logs --name apollo-configservice apolloconfig/apollo-configservice:${version}

参数说明:

Apollo Admin Service

获取镜像

根据镜像创建容器

1
2
3
4
5
docker run -p 8090:8090 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://fill-in-the-correct-server:3306/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=FillInCorrectUser -e SPRING_DATASOURCE_PASSWORD=FillInCorrectPassword \
-d -v /tmp/logs:/opt/logs --name apollo-adminservice apolloconfig/apollo-adminservice:${version}

参数说明:

Apollo Portal

获取镜像

根据镜像创建容器

1
2
3
4
5
6
7
docker run -p 8070:8070 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://fill-in-the-correct-server:3306/ApolloPortalDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=FillInCorrectUser -e SPRING_DATASOURCE_PASSWORD=FillInCorrectPassword \
-e APOLLO_PORTAL_ENVS=dev,pro \
-e DEV_META=http://fill-in-dev-meta-server:8080 -e PRO_META=http://fill-in-pro-meta-server:8080 \
-d -v /tmp/logs:/opt/logs --name apollo-portal apolloconfig/apollo-portal:${version}

参数说明:

Apollo管理界面

可以通过 http://fill-in-the-correct-server:8070 来访问Apollo的管理界面,输入用户名apollo,密码admin登陆账号

通过管理员工具 → 系统参数 → Key → 查询可以查看相应系统配置,以organizations举例,可以查看当前的部门配置,并进行修改保存。

Error: Admin Services Not Found

管理员工具 → 系统信息界面发现环境异常,Admin Services Not Found:

通过Docker log查看日志,发现请求出错

将localhost改为真实IP后重启容器,报错消失

客户端配置

客户端配置较为简单,在配置文件内加入下列参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#apollo相关配置#
app:
# 与Apollo Portal上面创建的app id保持一致
id: test

apollo:
# 就是apollo config server的地址
meta: http://fill-in-the-correct-server:8080
bootstrap:
# 是否开启 Apollo
enabled: true
eagerLoad:
# 将 Apollo 加载提到初始化日志系统之前,如果设置为false,则配置中心中修改日志信息不会生效
enabled: true
# apollo配置中心文件默认是.properties,如果apollo配置中心中的配置是放在*.yml文件中,此处的namespaces参数要完整的加上.yml后缀,否则不会生效
namespaces: application.yml, application,rsgis.application.yml
# 为了防止配置中心无法连接等问题,Apollo可以通过该配置在本地缓存一份配置
cacheDir: ./config
# 刷新时间,单位:分钟,默认5
refreshInterval: 5
# 指定使用哪个集群的配置
cluster: default
#对应apollo配置中心环境
env: DEV

并在pom.xml中加入依赖

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/com.ctrip.framework.apollo/apollo-client -->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>2.0.1</version>
</dependency>

之后在springboot启动类添加注解@EnableApolloConfig即可

Error: Docker虚拟IP地址

测试时持续报错,发现程序一直在请求Docker的虚拟IP地址172.17.0.3:8080

这显然是无法请求到的,需要手工声明 Apollo Meta Server 的服务地址

添加程序启动参数

再次运行后报错消失