zoukankan      html  css  js  c++  java
  • 实践分布式配置中心Apollo

    简介

    Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring环境也有较好的支持。

    官网:https://github.com/ctripcorp/apollo

    Wiki:https://github.com/ctripcorp/apollo/wiki

    说明:本次仅介绍官方提供的Quick Start方案,用于本地体验测试。生产环境一般采用分布式部署方案。

    安装 Apollo 配置中心

    搭建教程

    参照 https://github.com/ctripcorp/apollo/wiki/Quick-Start 搭建 Apollo 配置中心,文档写的很清楚,这里就赘述了。

    搭建完成并启动后,访问 http://localhost:8070 ,界面如下。

     输入用户名 apollo,密码 admin 后登录后,点击SampleApp进入配置界面。

     这里可以进入新建项目,并进入具体的项目设置相关的配置项。

    点击新建项目

    填入对应的配置项后提交

    项目信息即会在左侧显示

     点击右侧的新增配置按钮

    这里可以设置对应的配置项,类似我们本地配置application.properties。假如你配置了环境的话,配置时也可以选择对应的环境。

    配置后我们可以发现,这时候应用依旧是读不到的,这时候我们需要点击发布后才会发布到线上。

     

     这里有个小功能,不知道同学们有没有注意到。在列表的顶部有个文本的选项。

    点击后我们可以看到这里面的设置是和application.properties完全相同的,更方便了我们项目初始化的迁移工作。

    当然apollo还有很多其他的功能项,这里就不一一介绍了,有兴趣的话,可以看下官方的wiki。像项目的namespace,灰度发布,历史记录,以及权限等的设置都是很强大的功能。

    项目整合

    这里以springboot项目为例

    首先添加apollo客户端依赖。

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

    application.yml配置

    server:
      port: 8010
    apollo:
      bootstrap:
        enabled: true
        namespaces: application
      meta: http://localhost:8080

    Resources文件夹下新建META-INF文件夹

    添加app.properties文件

    app.id=test

    test对应apollo创建的对应的项目,如下图

    配置说明:

    • app.id:AppId是应用的身份信息,是配置中心获取配置的一个重要信息。
    • apollo.bootstrap.enabled:启用apollo配置。

     更多配置可参考:官方文档

     启动类

    /**
     * @author laoyeye.net
     * @Description: 启动入口
     * @date 2019/3/25 21:56
     */
    @EnableApolloConfig
    @SpringBootApplication
    public class AppStart {
    
      public static void main(String[] args) throws Exception {
        SpringApplication.run(AppStart.class, args);
      }
    }

    Controller

    /**
     * Description :
     *
     * @author : laoyeye.net
     * @date : Created in 2019/9/2 15:50
     */
    @RestController
    @RequestMapping("/apollo")
    public class ApolloTestController {
      @Value( "${test:test}" )
      String test;
    
      @RequestMapping("/test")
      public String test(){
        return test;
      }
    
    
    }

    最后启动springboot项目,我们来看下效果:

     在不停机的情况下,我们修改apollo的配置。

     发布生效后,我们在刷新刚才的链接

     可以看到页面的值立即更新成我们新设置的值了,这样是不是就解决了我们修改配置停机重启的尴尬了。

     环境的配置

    本地缓存

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

    本地缓存路径默认位于以下路径,所以请确保/opt/dataC:optdata目录存在,且应用有读写权限。

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

    本地配置文件会以下面的文件名格式放置于本地缓存路径下:

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

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

    meta地址和env环境的指定

    对比于网上其他文章喜欢将这两个配置写在项目代码配置中到方法,我个人更推荐将meta地址和env都通过配置文件配置到不同环境的服务器上,这样就避免了我们在应用中添加多余的配置,也减少了修改配置而造成的失误的情况。

    具体配置的方法如下:

    通过server.properties配置文件

    • 可以在server.properties配置文件中指定apollo.meta=http://config-service-url
    • 对于Mac/Linux,文件位置为/opt/settings/server.properties
    • 对于Windows,文件位置为C:optsettingsserver.properties

    另外,这个配置文件也是可以指定当前的环境到,当然这是个可选项,如果我们只有一个默认的meta就不需要在指定环境了。

    • 通过上面到配置文件来指定env=YOUR-ENVIRONMENT
    • 对于Mac/Linux,文件位置为/opt/settings/server.properties
    • 对于Windows,文件位置为C:optsettingsserver.properties

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

    • DEV

        Development environment

    • FAT

        Feature Acceptance Test environment

    • UAT

        User Acceptance Test environment

    • PRO

        Production environment

    当然了,meta和env的指定还有很多方法,大家可以参考:apollo使用指南 1.2中的相关介绍。

     更多配置信息请参考官方wiki:https://github.com/ctripcorp/apollo/wiki

  • 相关阅读:
    Office 2016 安装你所必须要注意的事项
    JetBrains软件开发框架下的类似于“.IntelliJIdea2018.1”的配置文件夹的移动
    “microsoft ace oledb 12.0 未注册”疑云
    WebStorm添加多个项目到当前工程目录
    SVN入门教程
    FreeMarker 快速入门
    ajax详解
    基于JavaMail的Java邮件发送:简单邮件发送
    css 文件上传按钮美化
    chrome开发者工具的使用
  • 原文地址:https://www.cnblogs.com/laoyeye/p/11624905.html
Copyright © 2011-2022 走看看