【Spring Cloud】集成Apollo分布式配置中心

ゝ一纸荒年。 2022-04-25 01:22 491阅读 0赞

【学习背景】

  1. 在上一篇博客中,学习并实践了Spring Cloud管理配置文件的组件Config,也用不同方式实现其刷新机制。而对于分布式配置中心,除了Spring Cloud Config,如ApolloDisconf等,也都可以帮助我们实现分布式配置管理的功能。本篇博客就将实现Spring Cloud应用与Apollo分布式配置的集成。

【学习内容】

一. Apollo简要介绍

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

二. Apollo特征描述

  • 统一管理不同环境、不同集群的配置
  • 配置修改实时生效(热发布)
  • 版本发布管理
  • 灰度发布
  • 权限管理、发布审核、操作审计
  • 客户端配置信息监控
  • 提供Java和.Net原生客户端
  • 提供开放平台API
  • 部署简单

三. Apollo集成步骤

Apollo Server 配置

下载Apollo源码,地址:https://github.com/ctripcorp/apollo

  1. 初始化数据库,ApolloConfigDB和ApolloPortalDB,直接运行项目源码中\scripts\db\migration\configdb和\scripts\db\migration\portaldb下的sql脚本
    在这里插入图片描述
  2. 修改apollo-configservice,apollo-adminservice,apollo-portal项目中的数据库连接地址,使用其提供的脚本打包。当然我们也可以直接下载打包好的文件,下载地址:https://github.com/ctripcorp/apollo/releases
    在这里插入图片描述
    下载好之后,解压,分别修改每个目录文件夹中config文件夹下的application-github.properties的数据库连接地址。
  3. 修改环境配置,在Apollo中,支持LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS多环境,默认使用的DEV环境,所以,我们将\apollo-portal\config下的apollo-env.properties文件的local.meta和dev.meta都修改为本地环境,该地址为Eureka的配置地址。
  4. 依次启动config、admin和portal,执行对应script下的startup.sh脚本即可。Apollo使用Eureka注册服务,启动成功后,可查看Eureka服务状况,默认地址:http://localhost:8080,如果需要修改,可在数据库中自行修改.
    在这里插入图片描述
  5. 浏览器输入:http://localhost:8070 ,看到了Apollo的管理页面,使用用户apollo,密码admin登录

在这里插入图片描述
Apollo Client 使用

在搭建好Apollo Server后,便可以在我们的客户端集成。

  1. 创建项目cloud-apollo-config-client
    在这里插入图片描述
  2. 引入依赖


    com.ctrip.framework.apollo
    apollo-client
    1.1.0
  3. Apollo 管理页面新建应用并授权
    在这里插入图片描述
    在这里插入图片描述

  4. Apollo 新建并发布配置,后面在客户端代码中读取该配置信息
    在这里插入图片描述
  5. 应用配置application.properties

    apollo.bootstrap.enabled = true
    server.port=8989
    spring.application.name=cloud-apollo-config-client

    apollo server地址

    apollo.meta=http://localhost:8080

    apollo server的应用id

    app.id=20190429

  6. @EnableApolloConfig获取配置信息

    @Configuration
    @EnableApolloConfig
    public class ApolloConfig {

    1. @Value("${env}")
    2. private String env;
    3. public String getEnv() {
    4. return env;
    5. }
    6. public void setEnv(String env) {
    7. this.env = env;
    8. }

    }

  7. Controller获取该配置信息接口

    @RestController
    public class ConfigController {

    1. @Resource
    2. private ApolloConfig apolloConfig;
    3. @RequestMapping("getConfig")
    4. public String getConfig(){
    5. return apolloConfig.getEnv();
    6. }

    }

通过以上Server和Client配置,我们就可以在客户端实时获取到服务端对应的配置信息。

Apollo 集成代码地址

  1. 以上客户端配置代码已上传github,地址:[https://github.com/huzhiting/spring-cloud-config][https_github.com_huzhiting_spring-cloud-config]

四. Apollo更新原理

  1. 通过上面的实例集成,可以知道Apollo配置的改变客户端是可以实时获取的,其中的原理就在于Apollo客户端和服务端保持了一个长连接,通过Http Long Polling实现的,从而能第一时间获得配置更新的推送,具体而言:
  • 客户端发起一个Http请求到服务端
  • 服务端会保持住这个连接30秒
  • 如果在30秒内有客户端关心的配置变化,被保持住的客户端请求会立即返回,并告知客户端有配置变化的namespace信息,客户端会据此拉取对应namespace的最新配置
  • 如果在30秒内没有客户端关心的配置变化,那么会返回Http状态码304给客户端
    客户端在服务端请求返回后会自动重连

    考虑到会有数万客户端向服务端发起长连,在服务端我们使用了async servlet(Spring DeferredResult)来服务Http Long Polling请求。

【学习总结】

  1. 在通过使用spring cloud config apollo 实现分布式配置中心后,感觉确实是Apollo要更好用一些,有独立的管理页面、实时发布、回滚等。
  2. 最后,从书中看到了一个比较全面的分布式配置中心的对比总结,给大家分享一下:

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,491人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring Cloud 分布式配置

    什么是配置中心 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心