Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

我们先拉取源码,修改maven setting file,构建本地工程同时,我们再来笔者这篇文章。

这篇我们只关注于默认dev环境的启动配置(比较简单的配置),其实ApolloPortalDB只需要在生产环境部署一个即可,而ApolloConfigDB需要在每个环境部署一套,如dev、fat、uat和pro分别部署4套ApolloConfigDB。

一、创建数据库

Apollo服务端共需要两个数据库:ApolloPortalDBApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了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

启动运行

启动完后,打开http://localhost:8080可以看到apollo-configserviceapollo-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

启动完后,打开http://localhost:8070就可以看到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,一般是由于本地启动了ShadowSocks,因为ShadowSocks默认会占用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(不区分大小写)

3.4 检查mysql配置版本和驱动

apollo com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known serve

检查数据库是否启动,检查mysql版本是否符合。具体可以参考

https://github.com/ctripcorp/apollo/issues/1138

问题持续更新。

到这里配置已经可以进行本地联调测试,如果有任何问题可以留言一起讨论。

更多可以参考

1、Apollo部署指南

2、Apollo开发指南

Apollo源码搭建调试看一文就够的更多相关文章

  1. Apollo源码解析看一文就够

    对于配置中心我们先抛出问号三连,什么是配置中心?为什么要用配置中心?配置中心怎么用? 笔者说说自己理解的配置中心,个人观点的十六字 消息存储 消息推送 环境隔离 灰度发布 今天我们先来看Apollo配 ...

  2. 源码级调试的XNU内核

    i春秋翻译小组-FWorldCodeZ 源码级调试的XNU内核 无论你是在开发内核扩展,进行漏洞研究,还是还有其他需要进入macOS / iOS内核,XNU,有时你需要附加调试器.当你这样做时,使用源 ...

  3. ARL(资产侦察灯塔系统)-源码搭建

    freebuf能力中心开源了一套资产扫描系统(https://github.com/TophantTechnology/ARL),提供docker版,但并无源码搭建的文档(无完整文档).于是在星光哥及 ...

  4. Apollo源码阅读笔记(二)

    Apollo源码阅读笔记(二) 前面 分析了apollo配置设置到Spring的environment的过程,此文继续PropertySourcesProcessor.postProcessBeanF ...

  5. MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试

    一:背景 1. 讲故事 上一篇说了mysql的架构图,很多同学反馈说不过瘾,毕竟还是听我讲故事,那这篇就来说一说怎么利用visual studio 对 mysql进行源码级调试,毕竟源码面前,不谈隐私 ...

  6. 微服务配置中心 Apollo 源码解析——Admin 发送发布消息

    内容参考:https://www.toutiao.com/a6643383570985386509/ 摘要: 原创出处http://www.iocoder.cn/Apollo/admin-server ...

  7. 源码搭建LNMP

      源码安装LNMP 作者:尹正杰   版权声明:原创作品,谢绝转载!否则将追究法律责任.       欢迎加入:高级运维工程师之路 598432640 前言:非常简单的一个平台LNMP,在生产实际环 ...

  8. windbg源码驱动调试 + 无源码驱动调试

    windbg源码驱动调试   环境信息 虚拟机:win7 32位 windbg:6.12(版本不存在太大影响) 设置过程 windbg与虚拟机连接:链接 配置windbg 配置好双机调试后,点击win ...

  9. Apollo源码阅读笔记(一)

    Apollo源码阅读笔记(一) 先来一张官方客户端设计图,方便我们了解客户端的整体思路. 我们在使用Apollo的时候,需要标记@EnableApolloConfig来告诉程序开启apollo配置,所 ...

随机推荐

  1. js将月份转换为英文简写的形式

    本文通过代码实例介绍一下如何实现将月份转换为英文简写的形式. 比如将一月份转换为Jan,需要的朋友可以做一下参考. 代码实例如下: [JavaScript] 纯文本查看 复制代码运行代码 1 2 3 ...

  2. JNI返回复杂对象之中的一个

    需求: 首先说需求.近期接手一个项目.要在底层解析二进制数据,数据结构比較负责,因为server是c++server,加之開始没有考虑到移动端开发,所以协议有点扯蛋.大体是这种,一个数据包里面是map ...

  3. HDOJ 4455 Substrings 递推+树状数组

    pre[i]第i位数往前走多少位碰到和它同样的数 dp[i]表示长度为i的子串,dp[i]能够由dp[i-1]加上从i到n的pre[i]>i-1的数减去最后一段长度为i-1的断中的不同的数得到. ...

  4. 在类的头文件里尽量少引入其它头文件 <<Effective Objective-C>>

    与C 和C++ 一样,Objective-C 也使用"头文件"(header file) 与"实现文件"(implementation file)来区隔代码.用 ...

  5. 远程调试 Asp.Net 项目

    项目部署到产品环境后,难免会发生一些故障,有一些可以在本地测试环境中直接重现,而有一些则无法重现.对于可以在本地测试环境中重现的Bug,开发人员往往能够很迅速地进行问题排查.而对于无法重现的Bug,就 ...

  6. Chapter1-data access reloaded:Entity Framework(下)

    1.4 Delving deep into object/relational differences 深入挖掘对象关系的不同 理解面向对象和关系世界的不同是重要的,因为他会影响你设计一个对象模型或者 ...

  7. 自己写的Android端HttpUtil工具类

    package com.sxt.jcjd.util; import java.io.IOException; import java.io.UnsupportedEncodingException; ...

  8. Linux如何查看进程等常用命令

    1.查进程    ps命令查找与进程相关的PID号:    ps a 显示现行终端机下的所有程序,包括其他用户的程序.    ps -A 显示所有程序.    ps c 列出程序时,显示每个程序真正的 ...

  9. UVA11183 Teen Girl Squad —— 最小树形图

    题目链接:https://vjudge.net/problem/UVA-11183 You are part of a group of n teenage girls armed with cell ...

  10. linux系统无法上外网,路由器可以上网,可以ping通路由器,ping不通外网IP

    临时生效方法(添加路由网关),执行: #route add default gw 192.168.92.1   #根据实际网关IP填写 如果不行,使用下面方法: 一:使用 route 命令添加使用ro ...