本文假设读者已经在本地部署Apollo配置中心,如还未部署可参考之前的文章 《Docker部署Apollo配置中心》 文章将引导在Docker中运行Apollo配置中心。在开始使用之前咱们先了解一下Apollo的的一些概念:
AppId是应用的身份信息,是从服务端获取配置的一个重要信息。Apollo支持三种设置 AppId 的方式,按照优先级从高到低分别为:
为方便演示,本文采用第3种方案来设置 AppId 。
Apollo支持应用在不同的环境有不同的配置, Apollo Meta Server 可以理解为包含特定环境配置信息的服务,比如 Apollo Meta Server 可以运行在 dev 环境下,你的应用同样也以 dev 环境运行那么获取到的配置就是 dev 环境的配置,稍后我们再来讲解 环境 与 Apollo Meta Server 的使用。从1.0.0版本开始支持以下方式配置apollo meta server信息,按照优先级从高到低分别为:
apollo.meta apollo.meta
apollo.meta 的值 ${env}_meta ${ENV}_META (1.2.0版本开始支持) 以上配置方式详细信息可查看 官方Wiki 来了解详细信息。
搞清楚 AppId 与 Apollo Meta Server 这两个概念后,可以再进一步了解环境的概念。我们都知道SpringBoot中可以通过 spring.profiles.active 来配置应用的配置环境,通过指定不同的环境来使应用运行时产生不同的行为,Apollo中的环境与SpringBoot的中的环境类似,你可以将Apollo部署在 dev 环境供开发人员测试,在 dev 环境部署Apollo后,然后将 Apollo的环境标记 设置为 dev 这样应用在 dev 环境运行并且获取到的配置信息是相对于 dev 环境中的配置。环境可以通过以下3种方式的任意一个配置:
Apollo中还支持 集群 、 Namespace 相关的概念这里就不细说了,本文中要使用Apollo配置中心了解 AppId 、 Apollo Meta Server 与 环境 就够了,详细可查看 Java客户端使用指南
可以start.spring.io/ 创建一个SpringBoot工程,这里我们创建一个 ApolloSample 的工程,并引入 spring-boot-starter-web 依赖,创建完后打开工程,然后再来演示Apollo的使用。本文中使用使用的工程及 docker-compose.yaml 文件已经打包上传到了 Github , 可访问 仓库地址 地址下载本地进行测试。
git clone git@github.com:yjwfn/ApolloSample.git 复制代码
首先添加Apollo客户端的Maven依赖:
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.1.0</version>
</dependency>
复制代码
《Docker部署Apollo配置中心》 已经讲解过如何在Dockre中部署,这里就不在细说了,我们这里直接在 ApolloSample 工程目录下运行 docker-compose up -d apollo-portal 把Apollo的服务启动起来,这里要等待大概1分钟,待服务完全启动后后打开 http://localhost:8070 访问 管理控制台 添加应用,应用ID和名称分别设置为 20181228001 和 ApolloSample 添加应用完成后,先发布一下应用不然启动 ApolloSample 工程的时候会找不到配置文件:
然后回到工程项目中在 application.properties 中添加以下配置:
app.id=20181228001 apollo.meta=http://apollo-configservice-dev:8080 apollo.bootstrap.enabled = true 复制代码
在工程里面添加个 RestControllre 用于获取指定的的配置:
package cn.rcntech.ApolloSample.controller;
import com.ctrip.framework.apollo.ConfigService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(path = "/configurations")
public class ApolloConfigurationController {
@RequestMapping(path = "/{key}")
public String getConfigForKey(@PathVariable("key") String key){
return ConfigService.getAppConfig().getProperty(key, "undefined");
}
}
复制代码
由于Apollo是在Docker中运行的,为了方便测试同样也将 ApolloSample 打包发布到Docker里面运行。
由于使用的Docker所以需要安装下Docker的 Maven插件 :
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>v1.4.9</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>apollo/apollo-sample</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
复制代码
然后再添加一个Dockerfile在工程的根目录下:
FROM openjdk:8-jre ARG JAR_FILE RUN mkdir /apollo-sample ADD target/$JAR_FILE /apollo-sample/app.jar ENTRYPOINT ["java", "-jar", "/apollo-sample/app.jar"] 复制代码
打开终端进入到工程目录下执行命令,将工程打包成Docker镜像:
./mvnw package -DskipTests 复制代码
打包完成后 apollo/apollo-sample 镜像就制作完成了,可以使用 docker images 查看镜像。注意我们的Apollo服务也是运行在Docker中的,工程容器需要能够访问 Apollo Meta Server 推荐使用 dockere-compose 部署:
vresion: 3
srevices:
... #其他服务
apollo-sample-dev:
image: apollo/apollo-sample:0.0.1-SNAPSHOT
environment:
ENV: dev
ports:
- 8090:8080
depends_on:
- apollo-configservice-dev
复制代码
使用 docker-compose 启动时需要 docker-compose.yaml 文件,本文使用的 docker-compose.yaml 文件已经包含在git仓库中了,只需要在仓库根目录运行 docker-compose up -d 即可,运行命令后查看是否启动成功可通过 docker logs <容器名称> 查看启动日志,启动成功后部分日志如下:
2018-12-29 00:50:34.092 INFO 1 --- [ main] c.c.f.f.i.p.DefaultApplicationProvider : App ID is set to 20181228001 by app.id property from System Property 2018-12-29 00:50:34.099 INFO 1 --- [ main] c.c.f.f.i.p.DefaultServerProvider : Environment is set to [dev] by OS env variable 'ENV'. 2018-12-29 00:50:34.184 INFO 1 --- [ main] c.c.f.a.i.DefaultMetaServerProvider : Located meta services from apollo.meta configuration: http://apollo-configservice-dev:8080! 2018-12-29 00:50:34.198 INFO 1 --- [ main] c.c.f.apollo.core.MetaDomainConsts : Located meta server address http://apollo-configservice-dev:8080 for env DEV from com.ctrip.framework.apollo.internals.DefaultMetaServerProvider 2018-12-29 00:50:34.413 INFO 1 --- [ main] c.r.A.ApolloSampleApplication : Starting ApolloSampleApplication v0.0.1-SNAPSHOT on 937733c90b79 with PID 1 (/apollo-sample/app.jar started by root in /) 2 复制代码
回到 管理控制中心 可以查看已注册的实例:
启动 ApolloSample 工程后我们可以访问 http://localhost:8090/configurations/welcome 查看 welcome 中的值,因为我们没有没配置所以默认会输出 undefined 。
现在往Apollo配置中心添加键为 welcome 的配置:
点击 发布 然后再获取下 welcome 的值可以看到值已经实时更新了:
现在Apllo配置中心已经集并测试成功,测试就暂时测试到这里后面再来探索更多的高级成功。
因为官方文档很全,这次测试SpringBoot集成总的来说挺顺利,后续会再深入了解些Apollo配置中心的知识,比如 多环境 、 多集群 、 Namespace 等知识。