携程apollo配置中心介绍及安装

    分布式配置中心有很多,springcloud的config、百度的disconfig、携程的apollo、淘宝的diamond。由于携程的apollo极少的侵入性,以及面对springcloud开发,所以我项目技术选型最终定为apollo。


 一、携程apollo优点:

    ①支持配置热更新,而且不需要想springcloud那样需要消息总线来回调通知。

    ②对于接入项目,只需要引client包和@EnableApolloConfig注解即可

    ③与spring整合,在0.10.0之后支持 ${} 格式直接获取数据,并支持热更新

    缺点:1、官方文档经过版本迭代很多赘述地方 2、环境被限定为dev、uat、fat、pro,不能自定义


二、apollo术语:

    友情提示:portal、admin、client都只需用同一个即可,但是apollo-configservice要不同环境生成不同的(不同环境数据库连接信息不同)。其实也可以通过参数来设置,详细的去看官网。本人是不同环境打不同的包。

    ①portal:可视化页面模块,进行配置文件的实际操作。

    ②meta server:携程写的一个接口,记录apollo-configservice地址

    ③apollo-configservice:提供获取配置信息接口

    ④apollo-client:给项目引用的包,该包还依赖buildtools、core等包,core里包含meta server信息。

    ⑤apollo-admin:portal的服务端。


三、安装:

    ①下载文件,官网地址:https://github.com/ctripcorp/apollo

    ②执行scripts/sql下的2个sql

    ③修改表:ApolloPortalDB/ServerConfig 修改成apollo-configservice(内嵌eureka)的地址,或者填写自己的eureka地址

                   ApolloConfigDB/ServerConfig 修改你要集成的环境,可填dev、uat、fat、pro(以逗号分隔)

    ④修改包:

        1、如果第③部你用了自己的eureka 那么把configuration项目启动类的@enableeurekaserver改为@enableeurekaclient,记得import里也要改!如果不用自己的此步跳过。

package com.ctrip.framework.apollo.configservice;

import com.ctrip.framework.apollo.biz.ApolloBizConfig;
import com.ctrip.framework.apollo.common.ApolloCommonConfig;
import com.ctrip.framework.apollo.metaservice.ApolloMetaServiceConfig;

import org.springframework.boot.actuate.system.ApplicationPidFileWriter;
import org.springframework.boot.actuate.system.EmbeddedServerPortFileWriter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.PropertySource;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableEurekaClient
@EnableAspectJAutoProxy
@EnableAutoConfiguration // (exclude = EurekaClientConfigBean.class)
@Configuration
@EnableTransactionManagement
@PropertySource(value = {"classpath:configservice.properties"})
@ComponentScan(basePackageClasses = {ApolloCommonConfig.class,
    ApolloBizConfig.class,
    ConfigServiceApplication.class,
    ApolloMetaServiceConfig.class})
public class ConfigServiceApplication {

        2、修改scripts/build.sh里apollo_config和apollo_portal数据库信息、meta_server的url以及META_SERVERS_OPTS。就是由于这一步才需要不同环境打不同的包。

        3、修改apollo-configservice的application.ym。加上eureka.instance.homePageUrl=http://你的外网IP:端口。除了此方法官网还提供另外3种忽略网卡的方式。注意:这行配置可以不修改源码,在后来的apollo-configservice的start.sh里加做启动参数也可以!

        4、如果有maven私库的deploy权限,把mvn clean install 改为mvn clean deploy,并添加setting.xml,官网上有例子。如果没有权限,则跳过这一步,下面有手动上传的方法。

        5、执行编译打包:./build.sh(第一次会去拉取很多包,所以要比较久时间)

    ⑤修改启动脚本start.sh(这一步如果是想用docker运行的话就跳过!)

        在编译打包结束后,在每个模块下都出现一个target。target里头有一个XXX-github.zip文件,解压开后,在scripts下有start.sh。

        要解压3个包:apollo-configservice、apollo-adminservice、apollo-portal

        修改start.sh的server_port和server_url

    ⑥启动项目:

        如果你要直接运行,./start.sh即可。这里主要讲解docker形式启动。

        1、下载dockerfile,地址https://github.com/kulovecc/docker-apollo.git           

        2、修改各个部分的dockerfile。主要就是端口和路径。

        3、按dockerfile里的docker build生成镜像,docker run生成容器        

    ⑦手动上传apollo-client包:

        进入你的本地仓库,默认地址为:~/.m2/repository/com/ctrip/framework/apollo/

        下面有4个包,将每一个包的jar包和pom文件都上传到私库。并且包名和格式都和本地仓库一样就可以了。

四、portal使用中重要概念

    ①namespace:每一个应用都有一个默认的application.properties私有namespace(apollo只支持properties),私有的只允许该应用可见,还可以创建共有的,共有的namespace可以其他应用共享。顺便说一点公共的namespace可以被覆盖。

    ②集群:这里的集群的指的是,同一环境可以创建多个集群,不同集群可以有不同配置。

五、项目中引用:

    ①引私库里apollo-client包。

    ②@EnableApolloConfig({“application”,”DEPT1.eureka.client.serviceUrl”,”DEPT1.hikari.HikariDataSource”}) 

application,为该AppId在配置中心的默认私有命名空间,里面存放该AppId自有的配置属性。(默认自带的命名空间,但是若指定了其他命名空间,application也需要写上) 

    ③启动参数加上 -Denv=环境 -Dapp.id=你的应用名

到此,结束!



你可能感兴趣的:(java,软件)