Apollo源码调试看一文就够
apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
我们先,修改maven setting file,构建本地工程同时,我们再来笔者这篇文章。
这篇我们只关注于默认dev环境的启动配置(比较简单的配置),其实apolloportaldb只需要在生产环境部署一个即可,而apolloconfigdb需要在每个环境部署一套,如dev、fat、uat和pro分别部署4套apolloconfigdb。
一、创建数据库
apollo服务端共需要两个数据库:apolloportaldb
和apolloconfigdb
,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。
创建apolloportaldb
通过mysql客户端导入apolloportaldb.sql即可。
创建apolloconfigdb
通过mysql客户端导入apolloconfigdb.sql即可。
二、本地启动
2.1 启动apollo config service和apollo admin service
创建运行配置
main class 配置
com.ctrip.framework.apollo.assembly.apolloapplication
vm options 配置
-dapollo_profile=github -dspring.datasource.url=jdbc:mysql://localhost:3306/apolloconfigdb?characterencoding=utf8 -dspring.datasource.username=root -dspring.datasource.password=****** -dlogging.file=/users/lewis/sourceprojects/apollo/log/apollo-assembly.log
1、datasource相关配置替换成你自己的数据库连接信息,注意数据库是apolloconfigdb
2、程序默认日志输出为/opt/logs/100003171/apollo-assembly.log,如果需要修改日志文件路径,可以增加logging.file参数,如下:
-dlogging.file=/users/lewis/sourceprojects/apollo/log/apollo-assembly.log
program arguments 配置
--configservice --adminservice
use classpath of module 配置
apollo-assembly
启动运行
启动完后,打开可以看到apollo-configservice
和apollo-adminservice
都已经启动完成并注册到eureka。
2.2 启动apollo-portal
创建运行配置
main class 配置
com.ctrip.framework.apollo.portal.portalapplication
vm options 配置
-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=root@123
-dlogging.file=/users/lewis/sourceprojects/apollo/log/apollo-portal.log
1、默认apolloportaldb中导入的配置只会展示dev环境的配置,所以这里配置了dev_meta属性,如果你希望在本地展示其它环境的配置,需要在这里增加其它环境的meta服务器地址,如fat_meta。
2、程序默认日志输出为/opt/logs/100003171/apollo-assembly.log,如果需要修改日志文件路径,可以增加logging.file参数,如下:
-dlogging.file=/users/lewis/sourceprojects/apollo/log/apollo-portal.log
program arguments 配置
--configservice --adminservice
use classpath of module 配置
apollo-protal
启动完后,打开就可以看到apollo配置中心界面了。
默认账号密码apollo/admin
2.3 接入客户端
创建运行配置
main class 配置
com.ctrip.framework.apollo.demo.spring.springbootdemo.springbootsampleapplication
vm options 配置
-denv=dev
-ddev_meta=http://localhost:8080
我们先配置dev环境的meta server地址为http://localhost:8080
,也就是apollo-configservice
的地址。
use classpath of module 配置
apollo-demo
2.4 服务端配置项
apolloportaldb配置
1.apollo.portal.envs - 可支持的环境列表
默认值是dev,如果portal需要管理多个环境的话,以逗号分隔即可(大小写不敏感),如:
dev,fat,uat,pro
修改完需要重启生效。
2.organizations - 部门列表
portal中新建的app都需要选择部门,所以需要在这里配置可选的部门信息,样例如下:
[{"orgid":"test1","orgname":"样例部门1"},{"orgid":"test2","orgname":"样例部门2"}]
apolloconfigdb配置
配置项统一存储在apolloconfigdb.serverconfig表中,需要注意每个环境的apolloconfigdb.serverconfig都需要单独配置,修改完一分钟实时生效。
1. eureka.service.url - eureka服务url
默认本地就是http://localhost:8080/eureka/
2. namespace.lock.switch - 一次发布只能有一个人修改开关,用于发布审核
这是一个功能开关,如果配置为true的话,那么一次配置发布只能是一个人修改,另一个发布。
3. config-service.cache.enabled - 是否开启配置缓存
这是一个功能开关,如果配置为true的话,config service会缓存加载过的配置信息,从而加快后续配置获取性能。
默认为false,开启前请先评估总配置大小并调整config service内存配置。
4. item.key.length.limit - 配置项 key 最大长度限制
默认配置是128。
5. item.value.length.limit - 配置项 value 最大长度限制
默认配置是20000。
三、开发启动的常见问题
3.1 本地运行时portal一直报env is down.
默认config service启动在8080端口,admin service启动在8090端口。请确认这两个端口是否被其它应用程序占用。
如果还伴有异常信息:org.springframework.web.client.httpclienterrorexception: 405 method not allowed,一般是由于本地启动了*
,因为*
默认会占用8090端口。
1.1.0版本增加了系统信息页面,可以通过管理员工具
-> 系统信息
查看当前各个环境的meta server以及admin service信息,有助于排查问题。
3.2 启动注册eureka地址错误
检查apolloconfigdb.serverconfig表中 eureka.service.url 是否配置正确。
3.3 检查是否存在没有配置的环境
java.lang.illegalargumentexception: not enough variable values available to expand 'pro_meta'
检查apolloportaldb.serverconfig表中 apollo.portal.envs 配置项是否都有配置,默认应该只配置dev(不区分大小写)
到这里配置已经可以进行本地联调测试,如果有任何问题可以留言一起讨论。
更多可以参考
上一篇: day21 03 异常处理
下一篇: python 3 在工作中的应用