基于Springboot的Apollo基本使用(一)

基于Springboot的Apollo基本使用(一)

1.Apollo简介

项目组最近的项目都是使用springcloud微服务开发,整个微服务框架中分布式的系统服务、集群等等都非常的多。

每一个服务都有着自己的配置(包括参数配置、服务器地址配置、功能开关等都能),当配置需要修改的时候就显得异常的麻烦,传统的通过配置文件、数据库配置完全不能满足要求。

在这种情况下,诞生了很多的统一配置的服务,虽然springcloud有自己的config配置中心,但是和携程的apollo相比还是太弱了,对比之后我们使用了Apollo。

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

github上携程开发人员对Apollo做了特别细致的介绍,但是对于我们只使用springboot进行开发的项目来说,其实只用到了里面一小部分内容。

因此我主要将Apollo和Springboot相关的内容整理出来,本文首先对Apollo进行QuickStart简单入门介绍以及基于Springboot框架的使用。

1.1Apollo配置中心基础模型

  1. 开发人员在配置中心对某些应用的配置(就是一些键值对的信息)进行修改
  2. 配置中心通知客户端进行配置更新(需要注册监听事件)
  3. Apollo客户端(应用程序)从配置中心拉取更新最新配置
basic-architecture.png

1.2Apollo的总体设计

overall-architecture.png

上图是Apollo的总体设计,从下往上看:

  • ConfigService(Apollo集成在一个jar包中)提供配置的读取,推送功能,Apollo客户端(你的应用程序)从这儿读取配置。
  • AdminService(Apollo集成在一个jar包中)提供配置的修改、发布功能,Apollo Portal(开发人员登录的修改配置的系统)调用该服务。
  • ConfigService和AdminService都是多实例服务,需要将它们注册到Eureka中。
  • 在Eureka之上有一层MetaServer用于封装Eureka的服务发现接口。
  • Client和Portal通过域名访问MetaServer获取ConfigService和AdminService的服务列表(IP+Port),然后直接通过套接字访问服务。
  • 为了简化部署,实际上会把Configservice、Eureka和MetaServer部署在同一个JVM进程中。

1.3Apollo配置分类

因为对于不同的应用,在不同的环境(开发、测试)、不同的集群(华东、华北)、不同的命名空间(例如springboot的application.property文件、你自己自定义的myappconfig.property),配置都有可能不同。

所以Apollo支持了4个维度管理Key-Value格式的配置(这些都是可以配置的):

  • application(应用)
    • 在springboot的application.property定义appid这个key的value,标识该类型的应用。
  • environment(4种环境)
    • DEV(开发环境)
    • FAT(功能测试)
    • UAT(验收测试)
    • PRO(生产环境)
  • cluster(集群)
  • namespace(命名空间,其实就是某个应用的不同配置文件)

2.Apollo QuickStart

携程的开发人员为了让大家几分钟快速上手Apollo配置中心,已经准备了一套安装包,大家按照教程马上就能部署好了(注意windows环境要安装能运行bash脚本的软件如gitbash)——》QuickStart github地址

安装包在不同的端口安装了配置中心的不同服务:

1. 打开 http://localhost:8070 进入配置中心就可以对各种应用进行配置(修改键值对)

image

  • 进入配置中心就可以新建项目(对应你的应用)
    比如你有一个叫KiddService的接口,可以给它起一个唯一标识的应用Id(这里我叫kiddApp),提交之后在主页就可以看到了。
image
  • 进入该项目的配置,先发布后配置或先配置后发布都行,这样你的应用就可以从配置中心拉取配置了。


    image
  • 编辑配置,其实就是添加或修改键值对


    image

2. Springboot客户端连接Apollo配置中心

使用Springboo客户端连接Apollo特别的简单,只需要几步:

  • 必要的设置

    • AppId,在application.properties文件加入指定appId,app.id=YOUR-APP-ID。
    • Apollo Meta Server,前面说过,这是对Eureka的一个封装服务,主要是用来得到ConfigServer的地址。在application.propertiesbootstrap.properties中指定apollo.meta=http://config-service-url
    • 本地配置缓存路径,确保目录存在
      • Mac/Linux: /opt/data/{appId}/config-cache
      • Windows: C:\opt\data{appId}\config-cache
  • 可选设置

    • Environment(上面说的四种环境)
      • 在Java程序启动脚本中,可以指定-Denv=YOUR-ENVIRONMENT
      • 还可以通过操作系统的System Environment ENV来指定
      • 通过配置文件来指定env=YOUR-ENVIRONMENT;(windows C:\opt\settings\server.properties)(linux /opt/settings/server.properties)
    • Cluster(集群)
      • 在Java程序启动脚本中,可以指定-Dapollo.cluster=SomeCluster
      • 过Spring Boot的配置文件,apollo.cluster=SomeCluster
      • 可以在server.properties配置文件中指定idc=xxx

例如在我的quickstart测试环境中我在application.properties文件中只要如下配置就行了:

server.port=9017
app.id=apolloapp
apollo.meta=http://127.0.0.1:8080
  • Maven Dependency(maven的依赖)
    <dependency>
        <groupId>com.ctrip.framework.apollo</groupId>
        <artifactId>apollo-client</artifactId>
        <version>1.0.0</version>
    </dependency>
  • 获取本应用的配置

    在springboot下获取配置的方法有很多种,以我开发的KiddService为例:

    • 1.直接调用Apollo的api(代码非常简单,废话。如果仅仅为了获取一个配置值搞得那么复杂别人还用它干啥?)
        Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null
        String someKey = "key1";
        String someDefaultValue = "none";
        String value = config.getProperty(someKey, someDefaultValue);
    
    • 2.使用xml整合Spring(都什么年代了,还用xml,这里不介绍了,有兴趣的同学去看Apollo Java客户端使用指南
    • 3.使用Java配置(注意有两个注解)
    @Configuration
    @EnableApolloConfig
    public class AppConfig {
     @Bean
     public TestJavaConfigBean javaConfigBean() {
        return new TestJavaConfigBean();
        }
    }
    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;
        }
    }
    

    一般所有的配置放在一个bean里面就可以了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥...
    程序员技术圈阅读 2,770评论 10 27
  • 个人专题目录[https://www.jianshu.com/u/2a55010e3a04] 一、Spring B...
    Java及SpringBoot阅读 2,823评论 1 25
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,717评论 6 342
  • 综合论述: 通过最近学习网络营销以来,深刻的认识到了策划在销售过程当中的作用,一个好的策划可以使我们节约很多时间...
    魏湘粤阅读 681评论 1 6