apollo 订阅
阿波罗是百度发布的名为“Apollo(阿波罗)”的向汽车行业及自动驾驶领域的合作伙伴提供的软件平台。发布时间是2017年4月19日,旨在向汽车行业及自动驾驶领域的合作伙伴提供一个开放、完整、安全的软件平台,帮助他们结合车辆和硬件系统,快速搭建一套属于自己的完整的自动驾驶系统。而将这个计划命名为“Apollo”计划,就是借用了阿波罗登月计划的含义。2018年2月15日,Apollo无人车亮相2018年中央电视台春节联欢晚会广东珠海分会场。在春晚直播中,百余辆Apollo无人车跨越港珠澳大桥。 [1]  4月19日,百度Apollo开放平台正式发布Apollo2.5版本。 [2]  11月7日,Apollo自动驾驶开放平台发布。 [3]  2019年1月,百度在拉斯维加斯举行的2019CES(消费电子展)上宣布,全球首个最全面智能驾驶商业化解决方案Apollo Enterprise正式问世。 [4]  2019年6月11日,百度Apollo入选“2019福布斯中国最具创新力企业榜”。 [5-6]  2019年9月26日,百度在长沙宣布,自动驾驶出租车队Robotaxi试运营正式开启。 [7] 展开全文
阿波罗是百度发布的名为“Apollo(阿波罗)”的向汽车行业及自动驾驶领域的合作伙伴提供的软件平台。发布时间是2017年4月19日,旨在向汽车行业及自动驾驶领域的合作伙伴提供一个开放、完整、安全的软件平台,帮助他们结合车辆和硬件系统,快速搭建一套属于自己的完整的自动驾驶系统。而将这个计划命名为“Apollo”计划,就是借用了阿波罗登月计划的含义。2018年2月15日,Apollo无人车亮相2018年中央电视台春节联欢晚会广东珠海分会场。在春晚直播中,百余辆Apollo无人车跨越港珠澳大桥。 [1]  4月19日,百度Apollo开放平台正式发布Apollo2.5版本。 [2]  11月7日,Apollo自动驾驶开放平台发布。 [3]  2019年1月,百度在拉斯维加斯举行的2019CES(消费电子展)上宣布,全球首个最全面智能驾驶商业化解决方案Apollo Enterprise正式问世。 [4]  2019年6月11日,百度Apollo入选“2019福布斯中国最具创新力企业榜”。 [5-6]  2019年9月26日,百度在长沙宣布,自动驾驶出租车队Robotaxi试运营正式开启。 [7]
信息
所属公司
百度 [8]
成立时间
2017年4月19日
外文名
Apollo [8]
中文名
阿波罗
涉及领域
汽车行业及自动驾驶领域 [8]
属    性
软件平台
阿波罗发布背景
2017年4月19日,百度又一次展示了自动驾驶领域领导者的大气风范,发布了一项名为“Apollo(阿波罗)”的新计划,向汽车行业及自动驾驶领域的合作伙伴提供一个开放、完整、安全的软件平台,帮助他们结合车辆和硬件系统,快速搭建一套属于自己的完整的自动驾驶系统。百度开放此项计划旨在建立一个以合作为中心的生态体系,发挥百度在人工智能领域的技术优势,促进自动驾驶技术的发展和普及。 [8]  而将这个计划命名为“Apollo”计划,就是借用了阿波罗登月计划的含义。 [8] 
收起全文
精华内容
参与话题
问答
  • Apollo学习(一)Apollo初学入门

    万次阅读 2018-02-04 11:05:30
    最近公司项目开始用微服务相关的技术设计apollo,自己也是初学者就边学边总结,部分内容来自官网,大牛请便。 1.1 背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的...
     前言
    
    最近公司项目开始用微服务相关的技术设计apollo,自己也是初学者就边学边总结,部分内容来自官网,大牛请便。

    1.1 背景

    随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址……

    对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制……

    在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。

    Apollo配置中心应运而生!

    1.2 Apollo简介

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

    Apollo支持4个维度管理Key-Value格式的配置:

    1. application (应用)
    2. environment (环境)
    3. cluster (集群)
    4. namespace (命名空间)

    同时,Apollo基于开源模式开发,开源地址:https://github.com/ctripcorp/apollo

    2、Why Apollo

    正是基于配置的特殊性,所以Apollo从设计之初就立志于成为一个有治理能力的配置发布平台,目前提供了以下的特性:

    • 统一管理不同环境、不同集群的配置

      • Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。
      • 同一份代码部署在不同的集群,可以有不同的配置,比如zookeeper的地址等
      • 通过命名空间(namespace)可以很方便地支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖
    • 配置修改实时生效(热发布)

      • 用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序
    • 版本发布管理

      • 所有的配置发布都有版本概念,从而可以方便地支持配置的回滚
    • 灰度发布

      • 支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例
    • 权限管理、发布审核、操作审计

      • 应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。
      • 所有的操作都有审计日志,可以方便地追踪问题
    • 客户端配置信息监控

      • 可以在界面上方便地看到配置在被哪些实例使用
    • 提供Java和.Net原生客户端

      • 提供了Java和.Net的原生客户端,方便应用集成
      • 支持Spring Placeholder, Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1+)
      • 同时提供了Http接口,非Java和.Net应用也可以方便地使用
    • 提供开放平台API

      • Apollo自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。不过Apollo出于通用性考虑,不会对配置的修改做过多限制,只要符合基本的格式就能保存,不会针对不同的配置值进行针对性的校验,如数据库用户名、密码,Redis服务地址等
      • 对于这类应用配置,Apollo支持应用方通过开放平台API在Apollo进行配置的修改和发布,并且具备完善的授权和权限控制
    • 部署简单

      • 配置中心作为基础服务,可用性要求非常高,这就要求Apollo对外部依赖尽可能地少
      • 目前唯一的外部依赖是MySQL,所以部署非常简单,只要安装好Java和MySQL就可以让Apollo跑起来
      • Apollo还提供了打包脚本,一键就可以生成所有需要的安装包,并且支持自定义运行时参数

    3、Apollo at a glance

    3.1 基础模型

    如下即是Apollo的基础模型:

    1. 用户在配置中心对配置进行修改并发布
    2. 配置中心通知Apollo客户端有配置更新
    3. Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用

    basic-architecture

    3.2 界面概览

    apollo-home-screenshot

    上图是Apollo配置中心中一个项目的配置首页

    • 在页面左上方的环境列表模块展示了所有的环境和集群,用户可以随时切换。
    • 页面中央展示了两个namespace(application和FX.apollo)的配置信息,默认按照表格模式展示、编辑。用户也可以切换到文本模式,以文件形式查看、编辑。
    • 页面上可以方便地进行发布、回滚、灰度、授权、查看更改历史和发布历史等操作

    3.3 添加/修改配置项

    用户可以通过配置中心界面方便的添加/修改配置项,更多使用说明请参见应用接入指南

    edit-item-entry

    输入配置信息:

    edit-item

    3.4 发布配置

    通过配置中心发布配置:

    publish-items

    填写发布信息:

    publish-items

    3.5 客户端监听配置变化(Java API样例)

    配置发布后,就能在客户端获取到了,以Java为例,获取配置的示例代码如下。Apollo客户端还支持和Spring整合,更多客户端使用说明请参见Java客户端使用指南.Net客户端使用指南

    Config config = ConfigService.getAppConfig();
    Integer defaultRequestTimeout = 200;
    Integer requestTimeout = config.getIntProperty("requestTimeout", defaultRequestTimeout);

    3.6 客户端监听配置变化

    通过上述获取配置代码,应用就能实时获取到最新的配置了。

    不过在某些场景下,应用还需要在配置变化时获得通知,比如数据库连接的切换等,所以Apollo还提供了监听配置变化的功能,Java示例如下:

    Config config = ConfigService.getAppConfig();
    config.addChangeListener(new ConfigChangeListener() {
      @Override
      public void onChange(ConfigChangeEvent changeEvent) {
        for (String key : changeEvent.changedKeys()) {
          ConfigChange change = changeEvent.getChange(key);
          System.out.println(String.format(
            "Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s",
            change.getPropertyName(), change.getOldValue(),
            change.getNewValue(), change.getChangeType()));
         }
      }
    });

    3.7 Spring集成样例

    Apollo和Spring也可以很方便地集成,只需要标注@EnableApolloConfig后就可以通过@Value获取配置信息:

    @Configuration
    @EnableApolloConfig
    public class AppConfig {}
    @Component
    public class SomeBean {
        @Value("${request.timeout:200}")
        private int timeout;
    
        @ApolloConfigChangeListener
        private void someChangeHandler(ConfigChangeEvent changeEvent) {
            if (changeEvent.isChanged("request.timeout")) {
                refreshTimeout();
            }
        }
    }





    展开全文
  • 携程Apollo统一配置中心的搭建和使用(java)

    万次阅读 多人点赞 2018-08-06 18:40:15
    一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备...

    一.Apollo配置中心介绍

    1、What is Apollo

    1.1 Apollo简介

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

    Apollo支持4个维度管理Key-Value格式的配置:

    1. application (应用)
    2. environment (环境)
    3. cluster (集群)
    4. namespace (命名空间)

    同时,Apollo基于开源模式开发,开源地址:https://github.com/ctripcorp/apollo

     

     二、分布式部署指南

    1.环境

    1.1 Java

    • Apollo服务端:1.8+
    • Apollo客户端:1.7+

    可以通过如下命令检查:

    java -version

    样例输出:

    java version "1.8.0_74"
    Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
    Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)

    1.2 MySQL

    • 版本要求:5.6.5+

    连接上MySQL后,可以通过如下命令检查:

    SHOW VARIABLES WHERE Variable_name = 'version';
    Variable_name Value
    version 5.7.11


    1.3、环境

    分布式部署需要事先确定部署的环境以及部署方式。

    Apollo目前支持以下环境:

     

    2、部署步骤

    部署步骤共三步:

    1. 创建数据库

      ApolloconfigDB(), 

      • Apollo服务端依赖于MySQL数据库,所以需要事先创建并完成初始化
    2. 获取安装包:GitHub地址:https://github.com/ctripcorp/apollo/releases
      • Apollo服务端安装包共有3个:apollo-configservice, apollo-adminservice, apollo-portal
        • 可以直接下载我们事先打好的安装包,也可以自己通过源码构建  
        • Apollo客户端jar包中由于会包含meta server信息,无法上传一个统一的jar包到中央仓库
        • 可以直接下载我们事先打好的安装包,修改相应配置后上传到自己公司的Maven私服
        • 也可以直接通过源码构建并上传到公司的Maven私服
    3. 部署Apollo服务端
      • 获取安装包后就可以部署到公司的测试和生产环境了

    2.1 创建数据库

    Apollo服务端共需要两个数据库:ApolloPortalDBApolloConfigDB

    2.1.1 创建ApolloPortalDB

    sql:下载地址:https://github.com/ctripcorp/apollo/tree/master/scripts/sql

    通过各种MySQL客户端导入sql/apolloportaldb.sql即可。

    导入成功后,可以通过执行以下sql语句来验证:

    select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
    Id Key Value Comment
    1 apollo.portal.envs dev 可支持的环境列表

    注:ApolloPortalDB只需要在生产环境部署一个即可

    2.1.2 创建ApolloConfigDB

    sql:下载地址:https://github.com/ctripcorp/apollo/tree/master/scripts/sql

    通过各种MySQL客户端导入sql/apolloconfigdb.sql即可。

    导入成功后,可以通过执行以下sql语句来验证:

    select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDB`.`ServerConfig` limit 1;
    Id Key Value Comment
    1 eureka.service.url http://127.0.0.1:8080/eureka/ Eureka服务Url

    注:ApolloConfigDB需要在每个环境部署一套,如fat、uat和pro分别部署3套ApolloConfigDB

    2.1.3 调整服务端配置

    Apollo自身的一些配置是放在数据库里面的。

    2.1.3.1 调整ApolloPortalDB配置

    配置项统一存储在ApolloPortalDB.ServerConfig表中。

    1.apollo.portal.envs - 可支持的环境列表

    默认值是dev,如果portal需要管理多个环境的话,以逗号分隔即可(大小写不敏感),如:

    DEV,FAT,UAT,PRO
    

    注1:一套Portal可以管理多个环境,但是每个环境都需要独立部署一套Config Service、Admin Service和ApolloConfigDB

    注2:只在数据库添加环境是不起作用的,还需要为apollo-portal和apollo-client添加新增环境对应的meta server地址。

    2.organizations - 部门列表

    Portal中新建的App都需要选择部门,所以需要在这里配置可选的部门信息,样例如下:

    [{"orgId":"TEST1","orgName":"样例部门1"},{"orgId":"TEST2","orgName":"样例部门2"}]

    3.superAdmin - Portal超级管理员

    超级管理员拥有所有权限

    默认值apollo(默认用户),多个账号以英文逗号分隔(,)。

    4.consumer.token.salt - consumer token salt

    如果会使用开放平台API的话,可以设置一个token salt。如果不使用,可以忽略。

    5.wiki.address

    portal上“帮助”链接的地址,默认是Apollo github的wiki首页,可自行设置。

    6.admin.createPrivateNamespace.switch

    是否允许项目管理员创建private namespace。设置为true允许创建,设置为false则项目管理员在页面上看不到创建private namespace的选项。

    2.1.3.2 调整ApolloConfigDB配置

    配置项统一存储在ApolloConfigDB.ServerConfig表中,需要注意每个环境的ApolloConfigDB.ServerConfig都需要单独配置。

    1.eureka.service.url - Eureka服务Url

    apollo-configservice和apollo-adminservice都需要向eureka服务注册,需要配置eureka服务地址。默认apollo-configservice本身就是一个eureka服务,所以只需要填入apollo-configservice的地址即可,如有多个,用逗号分隔(注意不要忘了/eureka/后缀)。

    如:内网开发环境

    1. 在DEV环境的ApolloConfigDB.ServerConfig表中设置eureka.service.url为:注1:这里需要填写本环境中全部的eureka服务地址,因为eureka需要互相复制注册信息

    注2:如果希望将Config Service和Admin Service注册到公司统一的Eureka上

    pollo默认自带了Eureka作为内部的注册中心实现,一般情况下不需要考虑为Apollo单独部署注册中心。

    如需要注册到自己的Eureka,需修改Config Service:

    1. 修改com.ctrip.framework.apollo.configservice.ConfigServiceApplication,把@EnableEurekaServer改为@EnableEurekaClient
    @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 {
      ...
    }
    1. 修改ApolloConfigDB.ServerConfig表中的eureka.service.url,指向自己的Eureka地址

    需要注意的是更改Eureka地址只需要改ApolloConfigDB.ServerConfig表中的eureka.service.url即可,不需要修改meta server地址。

    2.namespace.lock.switch - 一次发布只能有一个人修改开关,用于发布审核

    这是一个功能开关,如果配置为true的话,那么一次配置发布只能是一个人修改,另一个发布。

    3.config-service.cache.enabled - 是否开启配置缓存

    这是一个功能开关,如果配置为true的话,config service会缓存加载过的配置信息,从而加快后续配置获取性能。

    默认为false,开启前请先评估总配置大小并调整config service内存配置。

    2.2 获取安装包

    可以通过两种方式获取安装包:

    1. 直接下载安装包
      • GitHub Release页面下载预先打好的安装包
      • GitHub地址:https://github.com/ctripcorp/apollo/releases
      • 如果对Apollo的代码没有定制需求,建议使用这种方式,可以省去本地打包的过程
      • 测试V0.11.0版本,在下载安装包,成功部署后,后台默认账号密码会出现密码错误,后来使用了源码构建
    2. 通过源码构建

    2.2.1 直接下载安装包

    下载安装包,这里就不说了,参考: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

    2.2.2 通过源码构建

    下载源码V0.11.0,打开工程:

    2.2.2.1 配置数据库连接信息

    编辑scripts/build.sh,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息。

     

    注1:ApolloConfigDB在每个环境都需部署,不同的环境config-service和admin-service需要使用不同的数据库参数打不同的包,portal和client只需要打一次包即可

    注2:每个环境都需要独立部署一套config-service、admin-service和ApolloConfigDB

    • 也可在运行时指定:-Dserver.port=8100 -Dapollo_profile=github
    • -Dspring.datasource.url=jdbc:mysql://192.168.0.*:3306/ApolloConfigDB?characterEncoding=utf8
    • -Dspring.datasource.username=root -Dspring.datasource.password=123456

    2.2.2.2 配置各环境meta service地址(configservice部署的地址)

    Portal和Apollo客户端,client需要在不同的环境访问不同的meta service(apollo-configservice)地址,

    后面版本也是可以再运行时指定: -Dapollo.meta=http://192.168.*.*:6080

     

    2.2.2.3 执行编译、打包

    做完上述配置后,就可以执行编译和打包了。

    ./build.sh

    该脚本会依次打包apollo-configservice, apollo-adminservice, apollo-portal和apollo-client。

    注:由于ApolloConfigDB在每个环境都有部署,所以对不同环境的config-service和admin-service需要使用不同的数据库连接信息打不同的包,portal和client只需要打一次包即可

    2.2.2.4 获取apollo-configservice安装包

    位于apollo-configservice/target/目录下的apollo-configservice-x.x.x-github.zip

    需要注意的是由于ApolloConfigDB在每个环境都有部署,所以对不同环境的config-service需要使用不同的数据库参数打不同的包后分别部署

    2.2.2.5 获取apollo-adminservice安装包

    位于apollo-adminservice/target/目录下的apollo-adminservice-x.x.x-github.zip

    需要注意的是由于ApolloConfigDB在每个环境都有部署,所以对不同环境的admin-service需要使用不同的数据库参数打不同的包后分别部署

    2.2.2.6 获取apollo-portal安装包

    位于apollo-portal/target/目录下的apollo-portal-x.x.x-github.zip

    2.2.2.7 获取apollo-client相关jar包

    由于客户端jar包中会包含meta server信息,无法上传一个统一的jar包到中央仓库,所以需要自己上传到自己公司的Maven私服。

    注:meta server信息在打包后会写入apollo-core.jar包中的apollo-env.properties文件。

    build.sh中默认执行的命令是mvn clean install,所以会把apollo-client相关的jar包保存到本地的maven仓库(本地)。

    如果有maven仓库的deploy权限,建议通过maven命令直接上传,把install修改为deploy,同时按照下面的说明做对应配置即可。

    注:deploy操作需要在.m2/settings.xml中设置releases.reposnapshots.repo属性以及对应仓库的用户名和密码(注意server的id必须是releases和snapshots),如:

    <servers>
        <server>
            <id>releases</id>
            <username>someUserName</username>
            <password>somePassword</password>
        </server>
        <server>
            <id>snapshots</id>
            <username>someUserName</username>
            <password>somePassword</password>
        </server>
    </servers>
    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                 <releases.repo>http://${your_nexus_url}/nexus/content/repositories/${release-repository}</releases.repo>
                 <snapshots.repo>http://${your_nexus_url}/nexus/content/repositories/${snapshotrepository}</snapshots.repo>
            </properties>
         </profile>
    </profiles>
    

    或者也可以手工上传本地仓库中的apollo-client、apollo-core、apollo-buildtools的jar包、pom文件和apollo的pom文件,如下图所示,需要把本地仓库中的apollo相关文件都上传。

    apollo-client-maven-artifacts

    2.3 部署Apollo服务端

    2.3.1 部署apollo-configservice

    将对应环境的apollo-configservice-x.x.x-github.zip上传到服务器上,

    解压后执行scripts/startup.sh即可。如需停止服务,执行scripts/shutdown.sh.(默认是8080端口,端口占用需修改端口号,vim打开startup.sh,修改SERVER_PORT,修改了端口号,如用的默认eureka,需修改对应数据库配置,参考2.1.3.2)

    记得在startup.sh中按照实际的环境设置一个JVM内存,以下是我们的默认设置,供参考:

    export JAVA_OPTS="-server -Xms6144m -Xmx6144m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=4096m -XX:MaxNewSize=4096m -XX:SurvivorRatio=18"

    注1:如果需要修改JVM参数,可以修改startup.sh的JAVA_OPTS部分。

    注2:如要调整服务的日志输出路径,可以修改startup.sh中的LOG_DIR

    注3:如要调整服务的监听端口,可以修改startup.sh中的SERVER_PORT。另外apollo-configservice同时承担meta server职责,如果要修改端口,注意要同时修改scripts/build.sh中的meta server url信息以及ApolloConfigDB.ServerConfig表中的eureka.service.url配置项。

    也可以再运行时指定需要注册到的Eureka:-Deureka.instance.ip-address=http://${指定的IP}-Deureka.instance.homePageUrl=http://${指定的IP}:${指定的Port}

    注4:如果ApolloConfigDB.ServerConfig的eureka.service.url只配了当前正在启动的机器的话,在启动apollo-configservice的过程中会在日志中输出eureka注册失败的信息,如com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused。需要注意的是,这个是预期的情况,因为apollo-configservice需要向Meta Server(它自己)注册服务,但是因为在启动过程中,自己还没起来,所以会报这个错。后面会进行重试的动作,所以等自己服务起来后就会注册正常了。

    2.3.2 部署apollo-adminservice

    将对应环境的apollo-adminservice-x.x.x-github.zip上传到服务器上,解压后执行scripts/startup.sh即可。如需停止服务,执行scripts/shutdown.sh.(默认是8090端口,修改和config一样)

    记得在startup.sh中按照实际的环境设置一个JVM内存,以下是我们的默认设置,供参考:

    export JAVA_OPTS="-server -Xms2560m -Xmx2560m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=1024m -XX:MaxNewSize=1024m -XX:SurvivorRatio=22"

    注1:如果需要修改JVM参数,可以修改startup.sh的JAVA_OPTS部分。

    注2:如要调整服务的日志输出路径,可以修改startup.sh中的LOG_DIR

    注3:如要调整服务的监听端口,可以修改startup.sh中的SERVER_PORT

    2.3.3 部署apollo-portal

    apollo-portal-x.x.x-github.zip上传到服务器上,解压后执行scripts/startup.sh即可。如需停止服务,执行scripts/shutdown.sh.(默认是8070端口,修改和config一样)

    记得在startup.sh中按照实际的环境设置一个JVM内存,以下是我们的默认设置,供参考:

    export JAVA_OPTS="-server -Xms4096m -Xmx4096m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=1536m -XX:MaxNewSize=1536m -XX:SurvivorRatio=22"

    注1:如果需要修改JVM参数,可以修改startup.sh的JAVA_OPTS部分。

    注2:如要调整服务的日志输出路径,可以修改startup.sh中的LOG_DIR

    注3:如要调整服务的监听端口,可以修改startup.sh中的SERVER_PORT

     

     

    三、Java客户端使用指南

    1、准备工作

    1.1 环境要求

    • Java: 1.7+
    • Guava: 15.0+
      • Apollo客户端默认会引用Guava 19,如果你的项目引用了其它版本,请确保版本号大于等于15.0

    1.2 必选设置

    Apollo客户端依赖于AppIdEnvironment等环境信息来工作,所以请确保阅读下面的说明并且做正确的配置:

    1.2.1 AppId

    AppId是应用的身份信息,是从服务端获取配置的一个重要信息。

    请确保classpath:/META-INF/app.properties文件存在,并且其中内容形如:

    app.id=YOUR-APP-ID

    文件位置参考如下:

    app-id-location

    v0.7.0版本后,Apollo也支持通过System Property传入app.id信息,如

    -Dapp.id=YOUR-APP-ID

    注:app.id是用来标识应用身份的唯一id,格式为string。

    1.2.2 Environment

    Apollo支持应用在不同的环境有不同的配置,所以Environment是另一个从服务器获取配置的重要信息。

    Environment可以通过以下3种方式的任意一个配置:

    1. 通过Java System Property

      • 可以通过Java的System Property env来指定环境
      • 在Java程序启动脚本中,可以指定-Denv=YOUR-ENVIRONMENT
        • 如果是运行jar文件,需要注意格式是java -Denv=YOUR-ENVIRONMENT -jar xxx.jar
      • 注意key为全小写
    2. 通过操作系统的System Environment

      • 还可以通过操作系统的System Environment ENV来指定
      • 注意key为全大写
    3. 通过配置文件

      • 最后一个推荐的方式是通过配置文件来指定env=YOUR-ENVIRONMENT
      • 对于Mac/Linux,文件位置为/opt/settings/server.properties
      • 对于Windows,文件位置为C:\opt\settings\server.properties

    文件内容形如:

    env=DEV

    目前,env支持以下几个值(大小写不敏感):

    • DEV
      • Development environment
    • FAT
      • Feature Acceptance Test environment
    • UAT
      • User Acceptance Test environment
    • PRO
      • Production environment

    1.2.3 本地缓存路径

    Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。

    本地缓存路径位于以下路径,所以请确保/opt/dataC:\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 client-local-cache

    文件内容以properties格式存储,比如如果有两个key,一个是request.timeout,另一个是batch,那么文件内容就是如下格式:

    request.timeout=2000
    batch=2000

    注:本地缓存路径也可用于容灾目录,如果应用在所有config service都挂掉的情况下需要扩容,那么也可以先把配置从已有机器上的缓存路径复制到新机器上的相同缓存路径

    1.2.4 可选设置

    Cluster(集群)

    Apollo支持配置按照集群划分,也就是说对于一个appId和一个环境,对不同的集群可以有不同的配置。

    如果需要使用这个功能,你可以通过以下方式来指定运行时的集群:

    1. 通过Java System Property

      • 我们可以通过Java的System Property设置apollo.cluster来指定运行时集群(注意key为全小写)
      • 例如,可以在程序启动时通过-Dapollo.cluster=SomeCluster来指定运行时的集群为SomeCluster
    2. 通过配置文件

      • 首先确保/opt/settings/server.properties(Mac/Linux)或C:\opt\settings\server.properties(Windows)在目标机器上存在
      • 在这个文件中,可以设置数据中心集群,如idc=xxx
      • 注意key为全小写

    Cluster Precedence(集群顺序)

    1. 如果apollo.clusteridc同时指定:

      • 我们会首先尝试从apollo.cluster指定的集群加载配置
      • 如果没找到任何配置,会尝试从idc指定的集群加载配置
      • 如果还是没找到,会从默认的集群(default)加载
    2. 如果只指定了apollo.cluster

      • 我们会首先尝试从apollo.cluster指定的集群加载配置
      • 如果没找到,会从默认的集群(default)加载
    3. 如果只指定了idc

      • 我们会首先尝试从idc指定的集群加载配置
      • 如果没找到,会从默认的集群(default)加载
    4. 如果apollo.clusteridc都没有指定:

      • 我们会从默认的集群(default)加载配置

    2、Maven Dependency

    由于客户端jar包中会包含meta server信息,无法上传一个统一的jar包到中央仓库,所以请按照分布式部署指南的文档说明打包并上传到自己公司的Maven私服。应用在实际使用时只需要按照如下方式引入即可。

        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>0.10.2</version>
        </dependency>

    3、客户端用法

    本文使用的是springboot;其它方法请参考官方文档

    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

    3.1 API使用方式

     

    3.2 Spring整合方式

    3.2.1 配置

    如果是Spring Boot环境,建议参照3.2.1.3配置(这里是使用springboot的)。

    Apollo也支持和Spring整合(Spring 3.1.1+),只需要做一些简单的配置就可以了。

    Apollo目前既支持比较传统的基于XML的配置,也支持目前比较流行的基于Java(推荐)的配置。

    需要注意的是,如果之前有使用org.springframework.beans.factory.config.PropertyPlaceholderConfigurer的,请替换成org.springframework.context.support.PropertySourcesPlaceholderConfigurer。Spring 3.1以后就不建议使用PropertyPlaceholderConfigurer了,要改用PropertySourcesPlaceholderConfigurer。

    如果之前有使用<context:property-placeholder>,请注意xml中引入的spring-context.xsd版本需要是3.1以上(一般只要没有指定版本会自动升级的),建议使用不带版本号的形式引入,如:http://www.springframework.org/schema/context/spring-context.xsd

    3.2.1.1 基于XML的配置

    注:需要把apollo相关的xml namespace加到配置文件头上,不然会报xml语法错误。

    1.注入默认namespace的配置到Spring中

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:apollo="http://www.ctrip.com/schema/apollo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd">
        <!-- 这个是最简单的配置形式,一般应用用这种形式就可以了,用来指示Apollo注入application namespace的配置到Spring环境中 -->
        <apollo:config/>
        <bean class="com.ctrip.framework.apollo.spring.TestXmlBean">
            <property name="timeout" value="${timeout:100}"/>
            <property name="batch" value="${batch:200}"/>
        </bean>
    </beans>

    2.注入多个namespace的配置到Spring中

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:apollo="http://www.ctrip.com/schema/apollo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd">
        <!-- 这个是最简单的配置形式,一般应用用这种形式就可以了,用来指示Apollo注入application namespace的配置到Spring环境中 -->
        <apollo:config/>
        <!-- 这个是稍微复杂一些的配置形式,指示Apollo注入FX.apollo和FX.soa namespace的配置到Spring环境中 -->
        <apollo:config namespaces="FX.apollo,FX.soa"/>
        <bean class="com.ctrip.framework.apollo.spring.TestXmlBean">
            <property name="timeout" value="${timeout:100}"/>
            <property name="batch" value="${batch:200}"/>
        </bean>
    </beans>

    3.注入多个namespace,并且指定顺序

    Spring的配置是有顺序的,如果多个property source都有同一个key,那么最终是顺序在前的配置生效。

    apollo:config如果不指定order,那么默认是最低优先级。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:apollo="http://www.ctrip.com/schema/apollo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd">
        <apollo:config order="2"/>
        <!-- 这个是最复杂的配置形式,指示Apollo注入FX.apollo和FX.soa namespace的配置到Spring环境中,并且顺序在application前面 -->
        <apollo:config namespaces="FX.apollo,FX.soa" order="1"/>
        <bean class="com.ctrip.framework.apollo.spring.TestXmlBean">
            <property name="timeout" value="${timeout:100}"/>
            <property name="batch" value="${batch:200}"/>
        </bean>
    </beans>

    3.2.1.2 基于Java的配置(推荐)

    相对于基于XML的配置,基于Java的配置是目前比较流行的方式。

    注意@EnableApolloConfig要和@Configuration一起使用,不然不会生效。

    1.注入默认namespace的配置到Spring中

    //这个是最简单的配置形式,一般应用用这种形式就可以了,用来指示Apollo注入application namespace的配置到Spring环境中
    @Configuration
    @EnableApolloConfig
    public class AppConfig {
      @Bean
      public TestJavaConfigBean javaConfigBean() {
        return new TestJavaConfigBean();
      }
    }

    2.注入多个namespace的配置到Spring中

    @Configuration
    @EnableApolloConfig
    public class SomeAppConfig {
      @Bean
      public TestJavaConfigBean javaConfigBean() {
        return new TestJavaConfigBean();
      }
    }
       
    //这个是稍微复杂一些的配置形式,指示Apollo注入FX.apollo和FX.soa namespace的配置到Spring环境中
    @Configuration
    @EnableApolloConfig({"FX.apollo", "FX.soa"})
    public class AnotherAppConfig {}

    3.注入多个namespace,并且指定顺序

    //这个是最复杂的配置形式,指示Apollo注入FX.apollo和FX.soa namespace的配置到Spring环境中,并且顺序在application前面
    @Configuration
    @EnableApolloConfig(order = 2)
    public class SomeAppConfig {
      @Bean
      public TestJavaConfigBean javaConfigBean() {
        return new TestJavaConfigBean();
      }
    }
    @Configuration
    @EnableApolloConfig(value = {"FX.apollo", "FX.soa"}, order = 1)
    public class AnotherAppConfig {}

    3.2.1.3 在Spring Boot初始bootstrap阶段注入配置

    Apollo会在Spring的postProcessBeanFactory阶段注入配置到Spring的Environment中,早于bean的初始化阶段,所以对于普通的bean注入配置场景已经能很好的满足。

    不过Spring Boot有一些场景需要配置在更早的阶段注入,比如使用@ConditionalOnProperty的场景或者是有一些spring-boot-starter在启动阶段就需要读取配置做一些事情(如spring-boot-starter-dubbo),所以对于Spring Boot环境建议通过以下方式来接入Apollo(需要0.10.0及以上版本)。

    使用方式很简单,只需要在application.properties/bootstrap.properties中按照如下样例配置即可。

    1. 在bootstrap阶段注入默认application namespace的配置示例
         # will inject 'application' namespace in bootstrap phase
         apollo.bootstrap.enabled = true
    1. 在bootstrap阶段注入非默认application namespace或多个namespace的配置示例
         apollo.bootstrap.enabled = true
         # will inject 'application' and 'FX.apollo' namespaces in bootstrap phase
         apollo.bootstrap.namespaces = application,FX.apollo

    3.2.2 Spring Placeholder的使用

    Spring应用通常会使用Placeholder来注入配置,使用的格式形如${someKey:someDefaultValue},如${timeout:100}。冒号前面的是key,冒号后面的是默认值。

    建议在实际使用时尽量给出默认值,以免由于key没有定义导致运行时错误。

    从v0.10.0开始的版本支持placeholder在运行时自动更新,具体参见PR #972

    如果需要关闭placeholder在运行时自动更新功能,可以通过以下两种方式关闭:

    1. 通过设置System Property apollo.autoUpdateInjectedSpringProperties,如启动时传入-Dapollo.autoUpdateInjectedSpringProperties=false

    2. 通过设置META-INF/app.properties中的apollo.autoUpdateInjectedSpringProperties属性,如

    app.id=SampleApp
    apollo.autoUpdateInjectedSpringProperties=false

    对于v0.10.0之前的版本,placeholder只会在启动的时候赋值,在运行过程中即便在Apollo上修改发布了配置,placeholder的值也不会更新。如果需要运行时动态更新placeholder的值,有以下几种方式:

    1. 程序监听Apollo的ConfigChangeListener(如@ApolloConfigChangeListener),然后通过自己的代码来更新placeholder的值。
    2. 不使用placeholder方式获取配置,而是直接从config对象中获取配置。样例代码可以参考3.2.3 Spring Annotation支持getBatchgetTimeout方法。
    3. 【推荐】使用Spring Cloud的RefreshScope

    3.2.2.2 Java Config使用方式

    假设我有一个TestJavaConfigBean,通过Java Config的方式还可以使用@Value的方式注入:

    public class TestJavaConfigBean {
      @Value("${timeout:100}")
      private int timeout;
      private int batch;
     
      @Value("${batch:200}")
      public void setBatch(int batch) {
        this.batch = batch;
      }
     
      public int getTimeout() {
        return timeout;
      }
     
      public int getBatch() {
        return batch;
      }
    }

    在Configuration类中按照下面的方式使用(假设应用默认的application namespace中有timeoutbatch的配置项):

    @Configuration
    @EnableApolloConfig
    public class AppConfig {
      @Bean
      public TestJavaConfigBean javaConfigBean() {
        return new TestJavaConfigBean();
      }
    }

    3.2.2.3 ConfigurationProperties使用方式

    Spring Boot提供了@ConfigurationProperties把配置注入到bean对象中。

    Apollo也支持这种方式,下面的例子会把redis.cache.expireSecondsredis.cache.commandTimeout分别注入到SampleRedisConfig的expireSecondscommandTimeout字段中。

    @ConfigurationProperties(prefix = "redis.cache")
    public class SampleRedisConfig {
      private int expireSeconds;
      private int commandTimeout;
    
      public void setExpireSeconds(int expireSeconds) {
        this.expireSeconds = expireSeconds;
      }
    
      public void setCommandTimeout(int commandTimeout) {
        this.commandTimeout = commandTimeout;
      }
    }

    在Configuration类中按照下面的方式使用(假设应用默认的application namespace中有redis.cache.expireSecondsredis.cache.commandTimeout的配置项):

    @Configuration
    @EnableApolloConfig
    public class AppConfig {
      @Bean
      public SampleRedisConfig sampleRedisConfig() {
        return new SampleRedisConfig();
      }
    }

    需要注意的是,@ConfigurationProperties如果需要在Apollo配置变化时自动更新注入的值,需要配合Spring Cloud的RefreshScope使用。相关代码实现,可以参考apollo-demo项目中的SampleRedisConfig.javaSpringBootApolloRefreshConfig.java

    3.2.3 Spring Annotation支持

    Apollo同时还增加了两个新的Annotation来简化在Spring环境中的使用。

    1. @ApolloConfig
      • 用来自动注入Config对象
    2. @ApolloConfigChangeListener
      • 用来自动注册ConfigChangeListener

    使用样例如下:

    public class TestApolloAnnotationBean {
      @ApolloConfig
      private Config config; //inject config for namespace application
      @ApolloConfig("application")
      private Config anotherConfig; //inject config for namespace application
      @ApolloConfig("FX.apollo")
      private Config yetAnotherConfig; //inject config for namespace FX.apollo
     
      @Value("${batch:100}")
      private int batch;
      
      //config change listener for namespace application
      @ApolloConfigChangeListener
      private void someOnChange(ConfigChangeEvent changeEvent) {
        //update injected value of batch if it is changed in Apollo
        if (changeEvent.isChanged("batch")) {
          batch = config.getIntProperty("batch", 100);
        }
      }
     
      //config change listener for namespace application
      @ApolloConfigChangeListener("application")
      private void anotherOnChange(ConfigChangeEvent changeEvent) {
        //do something
      }
     
      //config change listener for namespaces application and FX.apollo
      @ApolloConfigChangeListener({"application", "FX.apollo"})
      private void yetAnotherOnChange(ConfigChangeEvent changeEvent) {
        //do something
      }
    
      //example of getting config from Apollo directly
      //this will always return the latest value of timeout
      public int getTimeout() {
        return config.getIntProperty("timeout", 200);
      }
    
      //example of getting config from injected value
      //the program needs to update the injected value when batch is changed in Apollo using @ApolloConfigChangeListener shown above
      public int getBatch() {
        return this.batch;
      }
    }

    在Configuration类中按照下面的方式使用:

    @Configuration
    @EnableApolloConfig
    public class AppConfig {
      @Bean
      public TestApolloAnnotationBean testApolloAnnotationBean() {
        return new TestApolloAnnotationBean();
      }
    }

    text-mode-spring-boot-config-sample

    3.3 Demo

    项目中有一个样例客户端的项目:apollo-demo,具体信息可以参考Apollo开发指南中的2.3 Java样例客户端启动部分。

    更多使用案例Demo可以参考Apollo使用场景和示例代码

    四、客户端设计

    client-architecture

    上图简要描述了Apollo客户端的实现原理:

    1. 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。(通过Http Long Polling实现)
    2. 客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。
      • 这是一个fallback机制,为了防止推送机制失效导致配置不更新
      • 客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified
      • 定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property: apollo.refreshInterval来覆盖,单位为分钟。
    3. 客户端从Apollo配置中心服务端获取到应用的最新配置后,会保存在内存中
    4. 客户端会把从服务端获取到的配置在本地文件系统缓存一份
      • 在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置
    5. 应用程序可以从Apollo客户端获取最新的配置、订阅配置更新通知

    五、本地开发模式

    Apollo客户端还支持本地开发模式,这个主要用于当开发环境无法连接Apollo服务器的时候,比如在邮轮、飞机上做相关功能开发。

    在本地开发模式下,Apollo只会从本地文件读取配置信息,不会从Apollo服务器读取配置。

    可以通过下面的步骤开启Apollo本地开发模式。

    5.1 修改环境

    修改/opt/settings/server.properties(Mac/Linux)或C:\opt\settings\server.properties(Windows)文件,设置env为Local:

    env=Local

    更多配置环境的方式请参考1.2.2 Environment

    5.2 准备本地配置文件

    在本地开发模式下,Apollo客户端会从本地读取文件,所以我们需要事先准备好配置文件。

    5.2.1 本地配置目录

    本地配置目录位于:

    • Mac/Linux: /opt/data/{appId}/config-cache
    • Windows: C:\opt\data\{appId}\config-cache

    appId就是应用的appId,如100004458。

    请确保该目录存在,且应用程序对该目录有读权限。

    【小技巧】 推荐的方式是先在普通模式下使用Apollo,这样Apollo会自动创建该目录并在目录下生成配置文件。

    5.2.2 本地配置文件

    本地配置文件需要按照一定的文件名格式放置于本地配置目录下,文件名格式如下:

    {appId}+{cluster}+{namespace}.properties

    • appId就是应用自己的appId,如100004458
    • cluster就是应用使用的集群,一般在本地模式下没有做过配置的话,就是default
    • namespace就是应用使用的配置namespace,一般是application client-local-cache

    文件内容以properties格式存储,比如如果有两个key,一个是request.timeout,另一个是batch,那么文件内容就是如下格式:

    request.timeout=2000
    batch=2000

    5.3 修改配置

    在本地开发模式下,Apollo不会实时监测文件内容是否有变化,所以如果修改了配置,需要重启应用生效。

     

     

     

    参考文档:https://github.com/ctripcorp/apollo

     

     

    展开全文
  • 无人驾驶及Apollo开源平台技术教程

    千人学习 2018-05-29 20:24:39
    无人驾驶及无人驾驶平台Apollo开源技术视频培训课程,通过展望无人驾驶行业,介绍Apollo自动驾驶开源平台的发展历程以及Apollo自动驾驶核心技术模块,让更多对自动驾驶感兴趣的开发者了解自动驾驶的核心技术模块,更...
  • Apollo-入门

    千次阅读 2019-05-12 22:30:51
    学习了一下Apollo,写了个Demo,做一下记录。 文档出处Apollogithub官网 https://github.com/ctripcorp/apollo 从https://github.com/nobodyiam/apollo-build-scripts下载Apollo编译打包好的项目,解压得到如下:...

    学习了一下Apollo,写了个Demo,做一下记录。
    文档出处Apollogithub官网
    https://github.com/ctripcorp/apollo
    从https://github.com/nobodyiam/apollo-build-scripts下载Apollo编译打包好的项目,解压得到如下:
    在这里插入图片描述
    主要是图中红色框中的文件,创建ApolloConfigDB、ApolloPortalDB两个数据库,分别执行如图中的两个SQL文件,修改demo.sh脚本,两个数据源对应两个库,
    执行如下命令

    ./demo.sh start
    

    没有错误即Apollo服务端即运行起来了,内置有测试用的Java客户端。
    执行如下命令即可启动:

    ./demo.sh client
    

    控制台如下
    在这里插入图片描述
    浏览器输入http://192.168.209.101:8070/即可浏览Apollo管理界面,登录初始账号:Apollo 密码:admin
    在这里插入图片描述
    可看到一个Apollo内置测试的项目
    修改一个timeout的属性
    在这里插入图片描述
    在这里插入图片描述
    然后保存,最后发布,记得一定要发布,不发布不会生效
    在这里插入图片描述
    即可看到控制台的变化
    在这里插入图片描述
    参考博客:https://www.cnblogs.com/sky-chen/p/10538310.html

    展开全文
  • Apollo (一) —— 自己搭建一个Apollo

    千次阅读 2019-08-28 12:34:50
    大家好,今天我要给大家分享是的携程提出的统一配置服务中心开源项目-Apollo。 在此,感谢Apollo开源项目团队为此做出的努力付出。^_^ -----------------------------------------------------------简介,老手...

    大家好,今天我要给大家分享是的携程提出的统一配置服务中心开源项目-Apollo。

    在此,感谢Apollo开源项目团队为此做出的努力付出。^_^

    -----------------------------------------------------------简介,老手觉得麻烦可绕过---------------------------------------

    首先我们要了解Apollo是做什么的:很简单就是把我们以前写在项目里的properties数据放到一个远程项目里面让我们远程获取。(这里只是我个人为了大家好理解这么写的,里面还有其他更多的功能比如集群、高可用、自带管理后台等等,详情请大家去阿波罗官网细细阅读文档)。apollo文档

    你说这有什么用?

    假设一个场景:公司产品经理给了小明同学一个需求,说我们公司的双十一活动每人每个商品限购10个。那么你实现的原理是不是会在代码里写一个变量commodity_number=10或者在properties文件里配置commodity_number=10然后获取配置文件数据再去写后续的逻辑代码? OK 你这样其实没问题的,写法正确,但是实际情况可能会有变化的,比如上线了,现在由于商品卖得太火爆,为了大家都能尽可能的获得一件商品,产品经理现在要你改成每人每件商品限购5个。这时你就尴尬了吧,你得先去改代码然后找上测试,然后才能上线。你自己算算这样得花多少时间完成?

    那么为了解决这种问题携程推出了一款开源项目叫Apollo,他怎么解决这个问题呢?他把你在本地的properties数据放到远程apollo项目里。你发布好服务端之后,利用apollo自带的后台管理界面通过key-value的形式来配置你的数据,在通过客户端可以超级简单调用代码就可以在你自己的项目里获取到你想要数据了。并且这个数据是实时更新的。那么我们现在来想想上面的场景采用apollo过后是不是小明同学就可以随便点击几下鼠标操作几下键盘就可以完成需求了?

    【提醒】Apollo服务端跟客户端之间的数据是实时更新的,服务器会实时推送数据到客户端,采用的是spring的长连接,并且客户端也会采用心跳机制去拉取服务端的数据。大致原理如下图:

     

    ---------------------------------------------------------------------干货开始----------------------------------------------------------------

    一、首先你需要的东西:

    1、阿波罗官方代码:https://github.com/ctripcorp/apollo    这里面包含了服务端与客户端。有点大建议大家在【码云】>【新建仓库】然后利用创建按钮上面的【导入已有仓库项目】来下载代码,这样快的多。我就不让大家从我的码云仓库下载了,自己动手记忆会牢记些。

    2、JDK 1.8 +

    (建议JDK安装目录不要带有中文、【空格】、特殊符号等,例如:Program Files 这种会导致使用Quick Start 里面的./demo.sh start出错,会提示【/c/Program: No such file or directory】 就是因为空格的问题,其他异常请按照具体异常处理)

    3、MYSQL 5.6.5+ 【请大家注意:目前apollo只支持mysql数据库,其他数据库可能会有兼容问题】

    4、eclipse 

    5、maven

     

    数据库文件放在:apollo\scripts\db\migration

     

    二、启动服务端项目

    1、服务端项目共有三个:

    依次启动顺序:apollo-configservice>apollo-adminservice>apollo-portal

     2、启动apollo-configservice:请找到项目里面的ConfigServiceApplication.java,这时不能直接使用main方法。必须加上启动参数

    如下操作:

     

    -Dapollo_profile=github
    -Dspring.datasource.url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf-8
    -Dspring.datasource.username=root
    -Dspring.datasource.password=123456
    -Dlogging.file=/opt/log/apollo.log

     

    点击Run就行了

    【注意】

    在启动apollo-configservice的过程中会在日志中输出eureka注册失败的信息,如com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused。需要注意的是,这个是预期的情况,因为apollo-configservice需要向Meta Server(它自己)注册服务,但是因为在启动过程中,自己还没起来,所以会报这个错。后面会进行重试的动作,不用管这种异常,等自己服务起来后就会注册正常了。懵逼的同学请百度:eureka

    3、apollo-adminservice 是同理操作

    4、apollo-portal启动

    启动类在:com.ctrip.framework.apollo.portal.PortalApplication

    配置也是差不多的只不过VM里面的数据不一样:

    -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=123456
    -Dlogging.file=/opt/log/apollo.log

    注意这里数据库是ApolloPortalDB

    三、解决jar包冲突

    有些人下载下来,并且mvn eclipse:eclipse之后,导入eclipse都是成功的,但是启动ConfigServiceApplication时的main方法会提示jar冲突,那是因为项目里多引入了log4j-slf4j-impl 这个jar包导致冲突。怎么去掉?我只给解决思路:

    如图:

    去每一个项目pom搜索jar包,有的话就去掉引入。并且在那个项目里面Referenced Libraries里面也要去Remove。

    OK 以上操作完了基本上项目就全部启动成功了

    eureka管理地址:http://localhost:8080/

    apollo后台管理地址:http://localhost:8070

    默认超级账号:

    name:apollo

    pass:admin

    由于我们是自己搭建的apollo,并不是用Quick Start项目来启动的,所以SimpleApp这个应用是无效的,我们得自己创建一个:

    【注意】

    AppId: 100004458

    这个Appld必须跟apollo-demo里面app.properties配置文件的app.id 一致

    添加一个数据:

    那么我们现在增加了一个数据:httptimeout=123123

    四、客户端获取数据

    1、启动apollo-demo项目,

    找到启动类:com.ctrip.framework.apollo.demo.api.SimpleApolloConfigDemo

    Run Comfig VM:

    -Denv=dev
    -Ddev_meta=http://localhost:8080

    启动成功后

    在控制台输入:httptimeout

    效果图:

    那么我们就已经获取到我们设置的数据了。

    总结:apollo的官方文档很全面,几个小时就能自己搭建了。建议大家可以去仔细阅读下这个文档。比我写的详细规范多了,

    而且apollo里面用的技术有很多比如eureka、分布式等等,让使用者用起来非常方便。

    最后是apollo的架构图:我相信如果你真的自己动手能跟我一样搭建了这套项目你就能看懂下面的图了

    至此-记录下我自己在部署apollo的经历

    展开全文
  • 1、What is Apollo 1.1 背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址……对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境、分集群管理配置...
  • Apollo入门教程(Windows)

    千次阅读 2018-09-26 15:51:18
    Apollo阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。...
  • Apollo(一)-基本介绍

    万次阅读 2019-08-01 17:05:39
    Apollo-基本介绍WhatWhy参考 What Apollo阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 ...
  • Apollo配置中心介绍

    万次阅读 2018-03-06 16:28:39
    最近公司订单中心重构,利用spring boot集成apollo配置中心,因此学习一下apollo配置中心 因为如今程序功能越来越复杂,程序的配置日益增多:各种功能的开关、参数配置、服务器地址、数据库链接等 对于配置的期望...
  • 笔者在工作中遇到如下问题,随着程序功能越多,配置文件不断增加,一些功能的开关、服务器地址、接口地址、不同环境的一些配置文件不同,这些在每次发布不同环境、更新项目时都比较繁琐,后来学习微服务时接触到了...
  • 携程Apollo阿波罗)安装部署以及java整合 服务器部署 可以按照apollo wiki 进行部署 https://github.com/ctripcorp/apollo/wiki/Quick-Start 安装 Java 环境 java 创建数据库 Apollo服务端共需要两...
  • Apollo阿波罗)架构深度剖析

    千次阅读 2019-10-23 09:07:39
    通过学习 Apollo 的架构,带你深入理解微服务架构的基本原理 一、介绍 Apollo阿波罗)[参考附录] 是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改...
  • 1.Springcloud的分布式配置中心组件 组件一般有两个,springcloud config,apollo。apollo有一个好处是apollo有界面,这是apollo的一个优势。...阿波罗apollo官方服务器演示http://106.12.25.204:8070/ 2.各模块概...
  • 携程阿波罗apollo学习

    2019-09-20 01:48:21
    一、总结: 1.管理:应用管理、命名空间管理、部门管理、用户管理、角色管理、权限管理、审计管理 2.数据结构:应用、元素item、元素变更记录、元素发布记录、元素灰度规则(临时命名空间) ...
  • 搭建阿波罗Apollo)分布式远程配置中心 一,准备工作: 系统环境:CentOS7,Windows JDK:java1.8及以上 MySql:5.7及以上 二,环境配置 在CentOS上成功安装 JDK 在Windows上安装MySql数据库 三,开始...
  • 繁琐的配置一直是开发人员的噩梦,Spring Cloud+Apollo的架构目前比较火热,相比Spring Cloud自带的配置中心更加方便修改发布,并且Apollo支持灰度发布、变更记录、权限管理等。能极大程度上减少开发人员在配置上...
  • Apollo阿波罗配置中心

    千次阅读 2017-10-19 19:42:49
    一、准备工作 1.2.1 AppId classpath:/META-INF/app.properties 内容app.id=YOUR-APP-ID 1.2.2 Environment 对于Mac/Linux,文件位置为/opt/settings/server.properties 例如env=DEV 详细见文档。...
  • Sentinel规则基于Apollo(阿波罗)持久化

    万次阅读 2020-10-23 10:21:48
    通过官网可以找到Sentinel目前支持以下Sentinel动态规则,我们以apollo为例做个讲解: 首先我们引入jar <dependency> <groupId>com.alibaba.csp</groupId> <arti
  • 分布式阿波罗Apollo配置中心

    千次阅读 2019-02-07 19:28:36
    分布式Apollo配置中心,其实也是一个微服务项目,里面有eurake配置中心,还有个前端。原理就是把配置文件中的key,value的值存到Apollo中,然后项目启动的时候从Apollo中读取 阿波罗git下载地址 1.导入数据库...
  • SpringCloudConfig与阿波罗的区别: 前者是将配置存放到git中,后者是将配置存放到数据库中。 2.搭建分布式配置中心阿波罗 1.下载aplolo配置中心 https://github.com/nobodyiam/apollo-build-scripts 2.上传到...
  • 百度阿波罗Apollo r3.0完整安装以及常用操作教程

    万次阅读 热门讨论 2018-08-21 10:49:06
    2019.1.7更新:目前阿波罗官网文档已经非常完整清晰,建议跟随官网文档操作 经过4天的折腾,组装电脑、装系统、下资源......终于把阿波罗r3.0给部署好了。写一下步骤希望可以帮助到有需要的人。 我的安装背景一台...
  • Apollo阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。...
  • 比较详细介绍: ... Apollo系列学习(阿波罗配置中心学习) 一、Apollo配置中心简单介绍 二、Windows 系统搭建基于携程Apollo配置中心单机模式 三、自定义Spring Boot项目通过配置中心...
  • 分布式配置中心有很多,springcloud的config、百度的disconfig、携程的apollo、淘宝的diamond。由于携程的apollo极少的侵入性,以及面对springcloud开发,所以项目技术选型最终定为apollo。一、携程apollo优点: ①...
  • 1. 下载阿波罗源码 Git地址 2.初始化数据文件 apolloportaldb.sql apolloconfigdb.sql 3.
  • Apollo系列学习(阿波罗配置中心学习)  一、Apollo配置中心简单介绍  二、Windows 系统搭建基于携程Apollo配置中心单机模式  三、自定义Spring Boot项目通过配置中心启动项目  四、如何修改configservice,...
  • Apollo github - 百度阿波罗

    千次阅读 2019-02-11 23:31:00
    https://github.com/ApolloAuto/apollo L4级量产园区自动驾驶解决方案 http://apollo.auto/parksolution_cn.html 转载于:https://www.cnblogs.com/Forwithy/p/10363644.html
  • Apollo API网关 阿波罗

    2019-10-29 20:37:18
    https://github.com/ctripcorp/apollo http://106.12.25.204:8070/ apollo/admin
  • 一、前言 之前一直学习SpringCloud...在学习Spring cloud config 的时候也有听到过携程的apollo,但一直没时间去弄。直到昨天看了一张图,如下:使我下定决心去看看携程的apollo配置中心。这张图也算是综合对比了spr...
  • idea 阿波罗apollo)设置

    千次阅读 2019-05-23 10:22:00
    项目启动时需要配置环境 转载于:https://www.cnblogs.com/UncleWang001/p/10910397.html

空空如也

1 2 3 4 5 ... 20
收藏数 32,350
精华内容 12,940
关键字:

apollo