Apollo官方文档的介绍其实已经很详细,出一个Apollo系列主要是对自己学习的一个归纳、源码解读以及踩坑的总结。大家还是以阅读官方文档为主!
Apollo系列会分篇介绍环境的搭建、常用场景的配置分析、源码解读等。系列文章均以官方文档为主!!!希望大家能积极讨论,有问题可随时留言,一起学习!
在实际的项目开发中经常会遇到配置信息的场景,常见的有两种配置形式:1.基于本地配置形式(通常有两种做法:将配置信息耦合在业务代码中;将配置信息配置在配置文件);2.适用于大规模分布式场景的集中式配置形式。
本地配置会有非常多的痛点,如修改代码带来的麻烦、修改配置后获取新配置不实时等。集中式配置好处非常多(虽然也会带来麻烦,但相比于好处,这些麻烦还是可以接受的),结合猿人谷多年的实战,在下面几点非常有效果:
- 配置信息统一管理
- 动态获取/更新配置信息
- 降低运维人员的维护成本
- 降低配置出错率
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
本篇介绍如何在本地使用IDE编译、运行Apollo。Talk is cheap,Show me the code. 学习开源最有效的方式就是将项目实实在在的跑起来,边踩坑边学习边总结,这样才能收获更多。
1 环境搭建
1.1 本地运行环境
本地开发需要如下组件:
- Java:1.8+
- MySQL:5.6.5+
- IDE:IntelliJ IDEA 2018.1.8(Ultimate Edition) ,版本可以更新一点,但某些低版本的IDEA可能会出一些奇奇怪怪的小问题。
踩坑
:IDEA在2018.1.8之前的版本debug时报程序包com.netflix.servo.util不存在,其实这个包是有的。当时百思不得其解,检查之后再检查,也没发现啥问题,升级IDEA版本后,世界安静了,你说意外不意外!
1.2 导入数据库信息
Apollo配置信息的存储是适用的Mysql
,需要一些初始化的数据库信息。市面上还有一些配置中心的相关开源项目,如百度开源的DisConf(也是适用Mysql存储配置信息)、360开源的QConf(使用的是ZooKeeper)、Spring Cloud的组件Spring Cloud Config等。
1.2.1 创建ApolloPortalDB
apolloportaldb.sql的信息如下:
1 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; |
1.2.2 创建ApolloConfigDB
apolloconfigdb.sql如下:
1 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; |
2 本地启动
2.1 Apollo Config Service和Apollo Admin Service
在本地开发时,一般会同时启动apollo-configservice
和apollo-adminservice
,是基于appollo-assembly来启动的,后面会进行详细介绍。
2.1.1 新建运行配置
如下图所示,点击Edit Configurations…
创建Application:
2.1.2 配置Application
如上图所示:
Name:ConfigAdminApplication
Main class配置:
com.ctrip.framework.apollo.assembly.ApolloApplication
如果希望独立启动apollo-configservice和apollo-adminservice,可以把Main Class分别换成 com.ctrip.framework.apollo.configservice.ConfigServiceApplication和 com.ctrip.framework.apollo.adminservice.AdminServiceApplication
VM options配置:username和password要填对。
1
2
3
4-Dapollo_profile=github
-Dspring.datasource.url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
-Dspring.datasource.username=root
-Dspring.datasource.password=123456可以指定日志文件的路径。
程序默认日志输出为/opt/logs/100003171/apollo-assembly.log,如果需要修改日志文件路径,可以增加logging.file参数,如下:
Dlogging.file=/your-path/apollo-assembly.log
Program arguments配置: –configservice –adminservice
启动完成后,打开http://localhost:8080
可以看到apollo-configservice和apollo-adminservice都已经启动完成并注册到Eureka。
2.2 Apollo-Portal
本地启动apollo-portal跟上面启动apollo-configservice和apollo-adminservice很相似。
跟上面一样,创建Application:
配置Application:
如上图所示:
- Name:PortalApplication
- Main class配置:
com.ctrip.framework.apollo.portal.PortalApplication
- VM options配置:
1
2
3
4
5
6-Dapollo_profile=github,auth
-Ddev_meta=http://localhost:8080/
-Dserver.port=8070
-Dspring.datasource.url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
-Dspring.datasource.username=root
-Dspring.datasource.password=123456
- 这里指定了apollo_profile是github和auth,其中github是Apollo必须的一个profile,用于数据库的配置,auth是从0.9.0新增的,用来支持使用apollo提供的Spring Security简单认证。
- 程序默认日志输出为/opt/logs/100003173/apollo-portal.log,如果需要修改日志文件路径,可以增加logging.file参数,如下:
- Dlogging.file=/your-path/apollo-portal.log
启动完后,打开 http://localhost:8070 就可以看到Apollo配置中心界面了。
可以在上面做些创建项目的测试。
以创建anna2019项目为例。下图为创建项目后,添加了两个配置。(建议大家一定一定要动手操作下,放心的做测试,不会删库的)
3 Demo应用接入
项目中有一个样例客户端的项目:apollo-demo。
跟上面一样,创建Application。
如上图所示:
- Name:SimpleApolloConfigDemo
- Main class配置:
com.ctrip.framework.apollo.demo.api.SimpleApolloConfigDemo
- VM options配置:-Dapollo.meta=http://localhost:8080
apollo-demo项目的app.properties文件中:apollo-demo/src/main/resources/META-INF/app.properties会有app.id的配置,这里修改为刚才创建的anna2019.
1 | app.id=anna2019 |
注:
AppId是应用的唯一身份标识
,Apollo客户端使用这个标识来获取应用自己的私有Namespace配置。
对于公共Namespace的配置,没有AppId也可以获取到配置,但是就失去了应用覆盖公共Namespace配置的能力。
运行SimpleApolloConfigDemo,启动成功后,可以看到:
1 | Apollo Config Demo. Please input key to get the value. Input quit to exit. |
在anna2019项目里我们配置了两个配置,Key分别为:yuanrengu、anna999 。
输入:yuanrengu
。可以看到结果如下:
4 总结
至此完成Apollo的本地运行环境已经搭建完成,并创建项目做了测试。再次重申,大家一定一定要动手操作,这样才能对项目理解更深刻。