目录
一、背景:
在此前我们工作的项目,所有的配置基本都是通过本地properties文件进行配置的。比如:数据库连接各种参数、外部接口服务配置、附件上传组件配置、自定义属性配置等。我们的运行环境主要分为三套:DEV(开发环境)、UAT(集成环境)、PRO(正式环境)。一方面,在需要调整配置的时候,必须登录不同环境的服务器平台手动的修改这些配置参数,然后通过Jenkins进行发布。另一方面我们现有近二十个微服务应用,每个微服务应用的配置又是独立的,这导致的结果就是可维护性较差,每一次修改配置文件的时候,工作量较大,并且配置信息不能实时生效,还需与客户沟通发布时间。
二、期望结果:
1、可以对不同环境下的配置文件进行统一管理,并且方便切换。
2、在程序运行过程中,可以动态的变更程序的配置文件,达到无感发布的效果。
3、可以将修改后的配置文件实时的推送到分布式服务器上的微服务应用。
三、解决方案:引入Apollo配置中心
1、关于Apollo配置中心的介绍:
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
2、Apollo基础模型图如下:
简单说就是:用户在配置中心对配置进行修改并发布,配置中心通知Apollo客户端有配置更新,Apollo客户端从配置中心获取最新配置、更新本地配置并通知我们的应用。
3、Apollo部署环境要求(特别注意):
- Java: 1.8+
- MySQL: 5.6.5+
4、Apollo安装:
(1)官网地址:https://github.com/ctripcorp/apollo
(2)下载地址(可以根据项目的需要选择不同的版本):https://github.com/apolloconfig/apollo/releases/tag/v1.9.2
主要用到三个模块,如下说明:
- apollo-adminservice:提供配置的修改、发布等功能;
- apollo-configservice:提供配置的读取、推送等功能;
- apollo-portal:配置管理前端页面;
*主要下载模块为上图红色框标记的压缩包
(3)初始化数据库(根据下载版本选择):
下载地址:https://github.com/apolloconfig/apollo/tree/1.9.1/scripts/docker-quick-start/sql
将两个SQL脚本语句copy,在Mysql数据库中进行执行,结果如下:
(4)修改配置文件:
配置apollo-configservice:
- 修改config(目录:apollo-configservice/config/application-github.properties),配置数据源:
- 修改启动文件(目录:apollo-configservice/scripts/startup.sh),配置日志目录:
*特别注意:一定要配置好日志目录,方便自己后续跟踪问题 ,其他配置项可以根据自己的实际情况进行配置。
apollo-adminservice和apollo-portal的配置与apollo-configservice是一样的,可以参考上面的配置,不做具体的说明。但是apollo-portal有一个特别的文件(目录:apollo-portal/config/apollo-env-properties),主要是针对于多环境的配置,一套portal可以管理多个configservice,目前官方主要支持三种环境:DEV(开发环境)、FAT(测试环境)、UAT(集成环境)、PRO(生产环境),简单部署图如下(请结合自己的实际情况进行配置):
(5)启动服务:启动顺序(apollo-configservice -> apoll-adminservice -> apollo-portal)
- 启动命令:./apollo-configservice/scripts/startup.sh
- 关闭命令:./apollo-configservice/scripts/shutdown.sh
*启动成功,如上图所示,三个应用都根据类似于上面的命令进行启动即可。
(6)校验安装是否成功:
- Eureka验证:浏览器访问http://127.0.0.1:8080
- 配置管理页面登录:浏览器访问http://127.0.0.1:8070
默认账号:apollo 默认密码:admin
登录成功,证明我们的Apollo配置中心已经安装完成!👍
5、Apollo客户端配置使用:
(1)Apollo应用配置:
- 创建应用
- 新增配置并发布(新增配置信息,并对需要的配置进行发布)
(2)Apollo客户端配置:(项目使用的是Springboot框架,Maven作为Jar包管理)
- pom文件引入Jar包:(根据自己的apollo版本,引入相同版本的Jar包)
<!--apollo客户端-->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.9.2</version>
</dependency>
- 启动类添加注解:
- 添加配置文件:
- 测试类定义:@Value可以用来获取配置文件中的属性值信息
- 测试结果:本次通过Postman工具调用API
第一次调用结果如下:
登录Apollo配置管理页面,修改我的应用中的配置项,修改完成点击“发布”(发布完成修改的配置信息才会生效):
第二次调用结果:(无需重启项目,直接调用)
*由图可知,我们的端口号已经发生变化,从之前的8089变为修改后的8088,动态发布配置成功👍
6、常见问题及解决方法:
问题描述:系统出错,请重试或联系系统负责人,项目人员列表为空
解决方法:修改Eureka服务器路径,不要使用localhost:8080,请使用本级的IP地址。如果公司项目有用到Eureke注册中心服务,则可直接使用,修改为公司内部的Eureka注册中心地址。
*修改完成,重启Apollo应用,刷新页面即可。
四、总结:
本篇文章只是做了简单的实践应用,而我们在实际的项目中还会用到Apollo的用户管理、系统权限管理、集群、Namespace、发布版本回滚等众多功能,在这里就不做过多的阐述,详细可以参考下面提供的官网学习地址。总体来说,Apollo配置中心的功能特性确实可以解决以上项目中的问题,对于系统应用的配置文件操作更加灵活,更加规范,可维护性也大大提高。
- 官方文档地址:Apollo
- Github地址:https://github.com/apolloconfig/apollo
五、写在最后:
感谢大家的支持,以上也是自己在工作实践中的总结,如果大家在Apollo配置中心应用的实践中遇到问题或者困难,欢迎评论留言,大家一起学习讨论。✌️