配置迁移至Apollo服务

一、背景

目前Java项目的配置信息是放置在SpringBoot的YML格式的文件中配置管理,但在运维时,假如项目的某个配置参数需要改动,并且希望立即生效,则当前的配置无法满足;假如这个配置参数可以修改,也希望是指定账户允许修改,只允许某些人修改;并且可以根据环境来读取配置信息。是的,没错,这些基本的操作都是apollo配置框架的特性。而且它的特性不止这一点,更多特性请看链接10.4.4.1、Apollo框架。apollo在国内也是受广大程序员们公认的开源服务框架排名第一的配置框架。

配置中心作为基础服务,可用性要求非常高,下面的表格描述了不同场景下Apollo的可用性:

场景

影响

降级

原因

某台config service下线 无影响   Config service无状态,客户端重连其它config service
所有config service下线 客户端无法读取最新配置,Portal无影响 客户端重启时,可以读取本地缓存配置文件  
某台admin service下线 无影响   Admin service无状态,Portal重连其它admin service
所有admin service下线 客户端无影响,portal无法更新配置    
某台portal下线 无影响   Portal域名通过slb绑定多台服务器,重试后指向可用的服务器
全部portal下线 客户端无影响,portal无法更新配置    
某个数据中心下线 无影响   多数据中心部署,数据完全同步,Meta Server/Portal域名通过slb自动切换到其它存活的数据中心

二、目的

1、配置可以集中管理。

2、在线上运行的配置参数,可以实时更改并通知服务应用。

3、配置可以设置权限,防止乱更改。

4、配置服务在线上可以高可用,一台挂了,可以及时自动切换至另一台。

5、易配置,不能有侵入性代码。

三、技术实施

  1. aduer-xxx-service或aduer-xxx-api项目的需要变更。
    1. pom.xml添加加依赖。

      <dependency>

          <groupId>com.ctrip.framework.apollogroupId>

          <artifactId>apollo-clientartifactId>

          <version>1.3.0version>

      dependency>

    2. 在项目的src/main/filer目录下对应的环境配置文件[env].properties里配置apollo的configservice的服务地址。
      1. 开发环境添加配置:

        #apollo配置
        apollo.meta=http://xxx:8080
      2. 测试环境添加配置:

        #apollo配置
        apollo.meta=http://xxx:8081
    3. 资源目录resources下添加application.properties,内容如下:

      # apollo集成

      # apollo 配置应用的 appid

      app.id=xxx-common-service

      # apollo meta-server地址,一般同config-server地址

      #@apollo.meta@是在src/main/filer目录对应的环境配置文件[env].properties里配置apollo的configservice的服务地址

      [email protected]@

      #启用apollo配置开关

      apollo.bootstrap.enabled=true

      #使Apollo的加载顺序放到日志系统加载之前

      apollo.bootstrap.eagerLoad.enabled=true

      # apollo 使用配置的命名空间,多个以逗号分隔

      apollo.bootstrap.namespaces = application

    4. 项目原来的bootstrap.yaml的配置移除项目,里面的对应环境的配置内容,粘贴出来。
      1. yaml文件格式内容需要先转成properties文件,通过在线工具转格式,地址:https://www.toyaml.com/index.html,如下图。配置迁移至Apollo服务_第1张图片
      2. 打开测试环境与开发环境的apollo服务的web编辑地址,地址:http://apollo.intranet.aduer.com/,java组的账号/密码是java/java。
         
      3. 登陆后点击“添加项目”。配置迁移至Apollo服务_第2张图片
      4. 之后跳转到添加项目页面,部门选择“Java组”,AppId与应用名称与你的工程名一样。应用负责人选择自己,最后选择“提交”。配置迁移至Apollo服务_第3张图片
      5. 添加成功后,自动跳转到你添加的项目的配置信息管理页面。配置迁移至Apollo服务_第4张图片
      6. 在环境列表选择对应的环境。

配置迁移至Apollo服务_第5张图片

  1. 右手边是namespace,默认是application,也可以添加命名空间。配置迁移至Apollo服务_第6张图片
  2. 在你选择的namespace里面选择“T文本”,再选择右手边的写图标,开始编辑配置。配置迁移至Apollo服务_第7张图片
  3. 将yaml文件对应环境的内容转成properties文件的内容复制到编辑面板,选择“√”保存。配置迁移至Apollo服务_第8张图片
  4. 之后,系统会回到namespace的信息显示,出现一个“发布”按钮,选择“发布”按钮;这里注意一下,编辑配置后,一定需要选择“发布”才会生效。配置迁移至Apollo服务_第9张图片
  5. “发布”按钮。配置迁移至Apollo服务_第10张图片
  6. 如何监听配置信息实时更改。
    1. 在启动类上添加激活apollo配置框架的注解:com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig.配置迁移至Apollo服务_第11张图片新建一个可以被启动类扫描到的类,写个方法,方法上添加apollo配置监听注解:com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener,其中注解@ApolloConfigChangeListener的value是监听namespace,interestedKeyPrefixes是监听的配置参数的前缀。配置迁移至Apollo服务_第12张图片

 

你可能感兴趣的:(框架)