文档章节

Apollo开发指南

Ciet
 Ciet
发布于 01/18 22:57
字数 2285
阅读 364
收藏 0

本文档介绍了如何在本地使用IDE编译、运行Apollo,从而可以帮助大家了解Apollo的内在运行机制,同时也为自定义开发做好准备。

 

一、准备工作

 

1.1 本地运行时环境

Apollo本地开发需要以下组件:

  1. Java: 1.8+
  2. MySQL: 5.6.5+
  3. IDE: 没有特殊要求

其中MySQL需要创建Apollo数据库并导入基础数据。 具体步骤请参考分布式部署指南中的以下部分:

  1. 一、准备工作
  2. 2.1 创建数据库

 

1.2 Apollo总体设计

具体请参考Apollo配置中心设计

 

二、本地启动

 

2.1 Apollo Config Service和Apollo Admin Service

我们在本地开发时,一般会在IDE中同时启动apollo-configserviceapollo-adminservice

下面以Intellij Community 2016.2版本为例来说明如何在本地启动apollo-configserviceapollo-adminservice

ConfigAdminApplication-Overview

 

2.1.1 新建运行配置

NewConfiguration-Application

 

2.1.2 Main class配置

com.ctrip.framework.apollo.assembly.ApolloApplication

注:如果希望独立启动apollo-configserviceapollo-adminservice,可以把Main Class分别换成 com.ctrip.framework.apollo.configservice.ConfigServiceApplicationcom.ctrip.framework.apollo.adminservice.AdminServiceApplication

 

2.1.3 VM options配置

ConfigAdminApplication-VM-Options

-Dapollo_profile=github
-Dspring.datasource.url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
-Dspring.datasource.username=root
-Dspring.datasource.password=

注1:spring.datasource相关配置替换成你自己的数据库连接信息,注意数据库是ApolloConfigDB

注2:程序默认日志输出为/opt/logs/100003171/apollo-assembly.log,如果需要修改日志文件路径,可以增加logging.file参数,如下:

-Dlogging.file=/your-path/apollo-assembly.log

 

2.1.4 Program arguments配置

--configservice --adminservice

 

2.1.5 运行

对新建的运行配置点击Run或Debug皆可。

ConfigAdminApplication-Run

启动完后,打开http://localhost:8080可以看到apollo-configserviceapollo-adminservice都已经启动完成并注册到Eureka。

ConfigAdminApplication-Eureka

 

2.2 Apollo-Portal

下面以Intellij Community 2016.2版本为例来说明如何在本地启动apollo-portal

PortalApplication-Overview

 

2.2.1 新建运行配置

NewConfiguration-Application

 

2.2.2 Main class配置

com.ctrip.framework.apollo.portal.PortalApplication

 

2.2.3 VM options配置

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=

注1:这里指定了apollo_profile是githubauth,其中github是Apollo必须的一个profile,用于数据库的配置,auth是从0.9.0新增的,用来支持使用apollo提供的Spring Security简单认证,更多信息可以参考Portal-实现用户登录功能

注2:spring.datasource相关配置替换成你自己的数据库连接信息,注意数据库是ApolloPortalDB

注3:默认ApolloPortalDB中导入的配置只会展示DEV环境的配置,所以这里配置了dev_meta属性,如果你希望在本地展示其它环境的配置,需要在这里增加其它环境的meta服务器地址,如fat_meta。

注4:这里指定了server.port=8070是因为apollo-configservice启动在8080端口,所以这里配置apollo-portal启动在8070端口。

注5:程序默认日志输出为/opt/logs/100003173/apollo-portal.log,如果需要修改日志文件路径,可以增加logging.file参数,如下:

-Dlogging.file=/your-path/apollo-portal.log

 

2.2.4 运行

对新建的运行配置点击Run或Debug皆可。

PortalApplication-Run

启动完后,打开http://localhost:8070就可以看到Apollo配置中心界面了。

PortalApplication-Home

注:如果启用了auth profile的话,默认的用户名是apollo,密码是admin

 

2.2.5 Demo应用接入

为了更好的开发和调试,一般我们都会自己创建一个demo项目给自己使用。

可以参考应用接入指南中的一、普通应用接入指南创建自己的demo项目。

 

2.3 Java样例客户端启动

项目中有一个样例客户端的项目:apollo-demo,下面以Intellij Community 2016.2版本为例来说明如何在本地启动。

 

2.3.1 配置项目AppId

2.2.5 Demo应用接入中创建Demo项目时,系统会要求填入一个全局唯一的AppId,我们需要把这个AppId配置到apollo-demo项目的app.properties文件中:apollo-demo/src/main/resources/META-INF/app.properties

apollo-demo-app-properties

如我们自己的demo项目使用的AppId是100004458,那么文件内容就是:

app.id=100004458

注:AppId是应用的唯一身份标识,Apollo客户端使用这个标识来获取应用自己的私有Namespace配置。

对于公共Namespace的配置,没有AppId也可以获取到配置,但是就失去了应用覆盖公共Namespace配置的能力。

更多配置AppId的方式可以参考1.2.1 AppId

 

2.3.2 新建运行配置

NewConfiguration-Application

 

2.3.3 Main class配置

SimpleApolloConfigDemo

 

2.3.4 VM options配置

apollo-demo-vm-options

-Dapollo.meta=http://localhost:8080

注:这里当前环境的meta server地址为http://localhost:8080,也就是apollo-configservice的地址。

更多配置Apollo Meta Server的方式可以参考1.2.2 Apollo Meta Server

 

2.3.5 概览

apollo-demo-overview

 

2.3.6 运行

对新建的运行配置点击Run或Debug皆可。

apollo-demo-run

启动完后,忽略前面的调试信息,可以看到如下提示:

Apollo Config Demo. Please input key to get the value. Input quit to exit.
>

输入你之前在Portal上配置的值,如我们的Demo项目中配置了timeout,会看到如下信息:

> timeout
> [SimpleApolloConfigDemo] Loading key : timeout with value: 100

客户端日志级别默认是DEBUG,如果需要调整,可以通过修改apollo-demo/src/main/resources/log4j2.xml中的level配置

<logger name="com.ctrip.framework.apollo" additivity="false" level="trace">
    <AppenderRef ref="Async" level="DEBUG"/>
</logger>

 

2.4 .Net样例客户端启动

apollo.net项目中有一个样例客户端的项目:ApolloDemo,下面就以VS 2010为例来说明如何在本地启动。

 

2.4.1 配置项目AppId

2.2.5 Demo应用接入中创建Demo项目时,系统会要求填入一个全局唯一的AppId,我们需要把这个AppId配置到ApolloDemo项目的APP.config文件中:apollo.net\ApolloDemo\App.config

apollo-demo-app-config

如我们自己的demo项目使用的AppId是100004458,那么文件内容就是:

<add key="AppID" value="100004458"/>

注:AppId是应用的唯一身份标识,Apollo客户端使用这个标识来获取应用自己的私有Namespace配置。

对于公共Namespace的配置,没有AppId也可以获取到配置,但是就失去了应用覆盖公共Namespace配置的能力。

 

2.4.2 配置服务地址

Apollo客户端针对不同的环境会从不同的服务器获取配置,所以我们需要在app.config或web.config配置服务器地址(Apollo.{ENV}.Meta)。假设DEV环境的配置服务(apollo-configservice)地址是11.22.33.44,那么我们就做如下配置:

apollo-net-server-url-config

 

2.4.3 运行

运行ApolloConfigDemo.cs即可。

启动完后,忽略前面的调试信息,可以看到如下提示:

Apollo Config Demo. Please input key to get the value. Input quit to exit.
>

输入你之前在Portal上配置的值,如我们的Demo项目中配置了timeout,会看到如下信息:

> timeout
> Loading key: timeout with value: 100

注:Apollo .Net客户端开源版目前默认会把日志直接输出到Console,大家可以自己实现Logging相关功能。

详见https://github.com/ctripcorp/apollo.net/tree/master/Apollo/Logging/Spi

 

三、开发

 

模块依赖图

模块依赖图

 

3.1 Portal 实现用户登录功能

请参考Portal 实现用户登录功能

 

3.2 Portal接入邮件服务

在配置发布时候,我们希望发布信息邮件通知到相关的负责人。现支持发送邮件的动作有:普通发布、灰度发布、全量发布、回滚,通知对象包括:具有namespace编辑和发布权限的人员以及App负责人。 和SSO类似,每个公司也有自己的邮件服务实现,所以我们相应的定义了EmailService接口,现有两个实现类:

  1. CtripEmailService:携程实现的EmailService
  2. DefaultEmailService:空实现

 

3.2.1 接入步骤

  1. 提供自己公司的EmailService实现,并在EmailConfiguration中注册。
  2. 构建邮件内容需要在PortalDB,serverconfig表内配置一些参数,如下:
  • apollo.portal.address Apollo Portal的地址。方便用户从邮件点击跳转到Apollo Portal查看详细的发布信息。
  • email.supported.envs 支持发送邮件的环境列表,英文逗号隔开。我们不希望发布邮件变成用户的垃圾邮件,只有某些环境下的发布动作才会发送邮件。
  • email.sender 邮件的发送人。
  • email.template.framework 邮件内容模板框架。将邮件内容模板化、可配置化,方便管理和变更邮件内容。
  • email.template.release.module.diff 发布邮件的diff模块。
  • email.template.rollback.module.diff 回滚邮件的diff模块。
  • email.template.release.module.rules 灰度发布的灰度规则模块。 我们提供了以上邮件模板样例,方便大家使用。

注:运行时使用不同的实现是通过Profiles实现的,比如你自己的Email实现是在custom profile中的话,在打包脚本中可以指定-Dapollo_profile=github,custom。其中github是Apollo必须的一个profile,用于数据库的配置,custom是你自己实现的profile。同时需要注意在EmailConfiguration中修改默认实现的条件@Profile({"!custom"})

 

3.2.2 相关代码

  1. ConfigPublishListener监听发布事件,调用emailbuilder构建邮件内容,然后调用EmailService发送邮件
  2. emailbuilder包是构建邮件内容的实现
  3. EmailService 邮件发送服务
  4. EmailConfiguration 邮件服务注册类

本文转载自:https://github.com/ctripcorp/apollo/wiki/Apollo%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97

下一篇: Apollo Quick Start
Ciet
粉丝 0
博文 68
码字总数 70
作品 0
南京
其他
私信 提问
加载中

评论(0)

新一代开源配置中心 - Apollo

小贴士 大家好,我是Apollo的主要作者之一 张乐,目前就职于 蚂蚁中间件团队,我们团队现在大力发展开源、金融云等业务。急需对技术热爱的小伙伴加入,无限HC~ 有兴趣的小伙伴可以联系我哦~...

lepdou
2017/04/27
0
0
开源分布式配置中心 - Apollo(阿波罗)

Apollo - A reliable configuration management system 一、背景介绍 Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时...

nobodyiam
2017/02/17
4.4W
12
Apollo 1.4 发布,携程开源的分布式配置中心

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

段段段落
2019/05/05
2.6K
7
apollo生产环境配置-实践笔记(附搭建框架图)

前言 我们这个月上线了apollo1.1.1版本(生产环境),目前一切运行良好,故在此记个笔记。 首先,附上流程图: 简要介绍 一套apollo portal配置管理服务来同时管理pro、dev环境,但pro、dev...

开源小菜鸟2333
2018/11/20
233
0
Apollo 1.1.2 发布,携程开源的分布式配置中心

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

王练
2018/11/03
1.5K
12

没有更多内容

加载失败,请刷新页面

加载更多

00-Java 面试准备

面试之前 面试前准备简历需要注意的几个方面: 写简历、改简历,这个一定要干的。简历有两个作用,一个是吸引别人,能让别人邀请你去面试,这是前提;另一个是引导面试的人,让面试的人问你所...

源程序
今天
54
0
OSChina 周二乱弹 —— 大王(@罗马的王)颜值制霸Osc社区

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @巴拉迪维 :Lunik的单曲《Seeing You Soar》 I hope you’re smiling,When seeing me soar. #今日歌曲推荐# 《Seeing You Soar》- Lunik 手...

小小编辑
今天
83
0
wordcount代码

1.写出map类 public class WCMapper extends Mapper<LongWritable,Text,Text,LongWritable>{ @Override protected void map(LongWritable key,Text value,Context context)throws IOExcepti......

七宝1
今天
59
0
Spring Batch 小任务(Tasklet)步骤

Chunk-Oriented Processing不是处理 step 的唯一方法。 考虑下面的一个场景,如果你仅仅需要调用一个存储过程,你可以在 ItemReader 中实现这个调用,然后在存储过程完成调用后返回 null。这...

honeymoose
今天
67
0
Linux日志分析

1. Linux日志文件的类型 2. 系统服务日志 2.1 syslogd的简介 2.2 syslogd的配置和使用 2.3 日志的安全性设置 2.4 远程日志记录服务 3. 日志的轮替 3.1 logrotate简介 3.2 logrotate的配置 3....

JiaMing
昨天
67
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部