赞
踩
ps:偷个懒,直接把我写的文档粘贴过来了,毕竟不想打字了= =
一、 文档目的
本文档主要目的为,介绍Apollo配置中心的配置及在Java程序中的调用,以便方便大家的开发与使用。
二、 Apollo简介
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
三、 Apollo部署方式
Apollo的部署方式,可以分为本地快速部署(Quick Start)和分布式部署。
官网地址:https://github.com/ctripcorp/apollo/wiki/Quick-Start
使用Quick Start有以下步骤:
1.1 准备工作
1.1.1 环境要求
1.1.1.1 Java
Apollo对java的版本要求如下:
Apollo服务端:1.8+
Apollo客户端:1.7+
因Quick Start需要在本地同时启动服务端与客户端,所以要求java版本为1.8以上。
1.1.1.2 Mysql
版本要求:5.6.5+。
Apollo的表结构对timestamp使用了多个default声明,所以需要5.6.5以上版本。但可以根据相关文档说明,进行数据库降级使用。可参考https://github.com/ctripcorp/apollo/issues/481。
1.1.2 Quick Start安装包准备
1.1.2.1 从github直接下载安装包
地址:https://github.com/nobodyiam/apollo-build-scripts
1.1.2.2 自行打包(不推荐)
因Quick Start本身即为方便快速启动而准备的程序包,所以并不推荐自己打包,但若有兴趣自行打包,可参考下面步骤:
修改apollo-configservice, apollo-adminservice和apollo-portal的pom.xml,注释掉spring-boot-maven-plugin和maven-assembly-plugin
在根目录下执行mvn clean package -pl apollo-assembly -am -DskipTests=true
复制apollo-assembly/target下的jar包,rename为apollo-all-in-one.jar
1.1.3 安装步骤
1.1.3.1 创建数据库
Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,且官方已提供文件,自行下载导入即可。
下载地址:https://github.com/nobodyiam/apollo-build-scripts/tree/master/sql
1.1.3.2 配置数据库连接信息
安装完数据库之后,需要对数据库连接信息进行配置,让服务端知道你数据库存放地址。打开demo.sh,修改下面的配置项(其他位置不需要改动):
#apollo_config_db_info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=用户名
apollo_config_db_password=密码(如果没有密码,留空即可)
#apollo_portal_db_info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=用户名
apollo_portal_db_password=密码(如果没有密码,留空即可)
1.1.3.3 启动Apollo配置中心
启动时,使用命令行进入项目所在目录(不需要通过IDE打开),运行demo.sh start即可访问。
注意:服务会默认占用8070(portal), 8080(configservice), 8090(adminservice)三个端口,其中,configservice跟默认的eureka注册中心位于同一进程内,占用8080端口。请保证这仨个端口未被占用。
2.1.4 网络策略
网络策略在官网有具体说明,主要为了解决网络设置导致的获取不到配置的问题。我在测试的时候,将服务部署在10.60.但我在本地访问,却访问不到配置中心。在查看日志后发现,该服务器有两个网卡,分别时10.18.X.X与192.168.X.X,而服务默认使用了192.168.X.X的网卡,导致我访问不了。解决这个问题,有多种方式,官网有说明,我使用了在start.sh中添加-D参数直接指定启动ip解决的。
参考文档:https://github.com/ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97#14%E7%BD%91%E7%BB%9C%E7%AD%96%E7%95%A5
2.2 部署步骤
2.2.1 创建数据库
同1.1.3.1.
数据库中重要表字段说明,可参照下面文档:
https://github.com/ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97#21-%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%BA%93
2.2.2 获取安装包
安装包同样可直接下载或自己通过源码构建。根据自己需求改动。
2.2.2.1 下载安装包
下载地址:https://github.com/ctripcorp/apollo/releases
下载apollo-adminservice-1.5.0-github.zip,apollo-configservice-1.5.0-github.zip,apollo-portal-1.5.0-github.zip,三个压缩包即可。
下载完成后需要做如下操作:
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?useSSL=false&characterEncoding=utf8
spring.datasource.username = someuser
spring.datasource.password = somepwd
3. 配置apollo-portal的meta信息(这里在多环境管理还会提到)。修改portal服务config路径下的apollo-env.properties,对meta进行修改,若无对应环境,可删除对应的配置。默认情况下,meta service 与 config service是在同一个JVM进程中,所以这里指定的即为config service的地址。如:
dev.meta=http://localhost:8080
fat.meta=http://apollo.fat.xxx.com
uat.meta=http://apollo.uat.xxx.com
pro.meta=http://apollo.xxx.com
2.2.2.2 通过源码构建
源码下载地址:https://github.com/ctripcorp/apollo
通过源码构建,需要做如下操作:
Ps:在windows下执行构建操作时,可能会报如下异常:ERROR OS=Windows and the assembly descriptor contains a *nix-specific root-relative-reference (starting with slash) / [duplicate]。问题原因是编译脚本调用获取文件的时候,以linux的路径来进行访问,所以在windows下会找不到,解决方式如下(我测试时,第二种方式可行,第一种有可能出现问题):
<fileSets>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory/>
</fileSet>
</fileSets>
或者
<fileSets>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>./</outputDirectory>
</fileSet>
</fileSets>
2.2.3 部署及启动应用
将zip包上传到服务器相应位置,解压后,执行scripts/start.sh即可。
Ps:在执行start.sh时可设置JVM内存内存设置,可根据需求来设置。我使用了默认配置。
四、 Java客户端调用方式
1.1.3 本地缓存路径
Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。
本地缓存路径默认位于以下路径,所以请确保/opt/data或C:\opt\data\目录存在,且应用有读写权限。
Mac/Linux: /opt/data/{appId}/config-cache
Windows: C:\opt\data{appId}\config-cache
本地配置文件会以下面的文件名格式放置于本地缓存路径下:
{appId}+{cluster}+{namespace}.properties
appId就是应用自己的appId,如100004458
cluster就是应用使用的集群,一般在本地模式下没有做过配置的话,就是default
namespace就是应用使用的配置namespace,一般是application.
本地缓存路径,可以根据自身需求进行自定义。自定义方式有多种:
在application.properties或bootstrap.properties中指定apollo.cacheDir=/opt/data/some-cache-dir。
在server.properties配置文件中指定apollo.cacheDir=/opt/data/some-cache-dir。
这里同样可以通过指定jvm参数的方式指定,更多自定义方式请参考:
https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97#1231-%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BC%93%E5%AD%98%E8%B7%AF%E5%BE%84
maven依赖
配置完环境后,需要引入Apollo的client依赖,如下:
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.5.0</version>
</dependency>
上述代码的作用是,获取默认的配置NameSpace(application.properties),并设置监听,最后通过键值key获取配置文件中的值。
注:在获取Config对象时,可通过ConfigService.getAppConfig();获取默认的NameSpace(application.properties),也可通过ConfigService.getConfig(configNamespace);来获取其他NameSpace下的配置信息。
若配置文件的格式不为properties,则需要写完整的名称,如test.yaml。
3.2 Spring整合方式
Apollo也支持和Spring整合(Spring 3.1.1+),只需要做一些简单的配置.Apollo支持spring的多种整合方式,xml方式,javaconfig方式,springboot方式等,xml方式暂不介绍。
3.2.1 配置
3.2.1.1 Javaconfig整合方式
直接看代码:
需要注意的点:
3.2.2 Spring Placeholder的使用
跟读取配置文件中的使用方式相同:
@Value("${name:default}")
private String name;
同时,也可以在应用中的配置文件里,使用placeholder,读取配置中心的配置信息。
多种方式不做赘述了。有疑问可参考:
https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97#322-spring-placeholder%E7%9A%84%E4%BD%BF%E7%94%A8
3.2.3 Spring Annotation支持
Apollo增加了几个新的Annotation来简化在Spring环境中的使用。
@ApolloConfig
o 用来自动注入Config对象
@ApolloConfigChangeListener
o 用来自动注册ConfigChangeListener
@ApolloJsonValue
o 用来把配置的json字符串自动注入为对象
然后在configuration类中,将bean注入spring容器即可。
五、 多环境管理
Apollo可支持多个环境的管理和配置,实现步骤如下:
这里指定了不同环境的meta server(即eureka注册中心,默认为configsevice的地址),根据你的具体情况作出调整。
3. 客户端设置
Java客户端调用时可使用下面方式:
1)在配置文件中添加 env=你的环境。对于Mac/Linux,文件位置为/opt/settings/server.properties
对于Windows,文件位置为C:\opt\settings\server.properties(没有可自己创建)。
2)在你应用的根目录或者config目录,添加文件apollo-env.properties,在文件中指定meta server。结合1.2步,就可以修改server.properties时,自动更改配置了。
apollo-env.properties配置如下:
六、 参考文档及源码
Apollo分布式部署指南:
https://github.com/ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97
Java客户端使用指南:
https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97
源码:
https://github.com/ctripcorp/apollo
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。